J'essaie simplement de transmettre l'URL du paramètre /server/?Server=ServerName
重写为 /server/ServerName
,以便 ServerName
à PHP.
J'ai actuellement ceci dans mon .htaccess
dossier :
RewriteEngine on RewriteBase / RewriteCond %{QUERY_STRING} Server=([^&]+) RewriteRule "^server/$" "/server/%1/?"
En essayant de visualiser /server/ServerName
或 /server/?Server=ServerName
, j'ai eu une erreur 404.
Voici mon journal de réécriture :
init rewrite engine with requested uri /server/ pass through /server/ strip per-dir prefix: C:/wamp64/www/server/ -> server/ applying pattern '^server/$' to uri 'server/' RewriteCond: input='Server=ServerName' pattern='Server=([^&]+)' => matched rewrite 'server/' -> '/server/ServerName/?' split uri=/server/ServerName/? -> uri=/server/ServerName/, args=<none> trying to replace prefix C:/wamp64/www/ with / trying to replace context docroot C:/wamp64/www with context prefix internal redirect with /server/ServerName/ [INTERNAL REDIRECT]
À ce stade, j'ai besoin d'un peu de conseils car je suis frustré et j'ai l'impression qu'il me manque une chose simple.
J'ai essayé d'ajuster :
J'ai également cherché à réécrire le code pour essayer de voir s'il s'agit réellement d'une réécriture.
À l'aide du code ci-dessous, j'ai réussi à déplacer le répertoire /test2/
重写为 /server/?Server=ServerName
et la page s'est bien chargée, je sais donc que le module est actif et en cours d'exécution.
RewriteRule ^test2/$ /server/?Server=ServerName [PT,L,R=301]
J'ai essayé de faire ce changement sans succès. L'URL ne sera pas réécrite, mais la page se chargera. Réécriture d'URL conviviale Apache 2.4 .htaccess
RewriteRule ^server/([^/\.]+)/?$ /server/?Server=? [L]
Vous semblez aller dans la mauvaise direction. Le
/server/ServerName
,因此在内部将请求从/server/ServerName
重写为 /em>/server/index.php?Server=ServerName
(请注意添加index.php
,如注释中所述)。/server/index.php?Server=ServerName
dans la source HTML vers laquelle vous devriez créer un lien est le chemin du fichier sous-jacent (caché) qui gère réellement la demande.Bien que vous semblez l'avoir mentionné dans la dernière ligne...
L'URL doit être réécrite, sinon la page ne se chargera pas. Il peut y avoir une certaine confusion quant à ce qu'est exactement une « réécriture ». Cela ne change pas l'URL. Vous n'utilisez pas
.htaccess
pour modifier l'URL. Vous devez modifier manuellement l'URL dans la source HTML - l'URL vers laquelle vous souhaitez créer un lien.Si vous le souhaitez, vous pouvez (éventuellement) implémenter une "redirection" externe plus tard - cela modifie l'URL. Mais c'est uniquement pour rediriger les moteurs de recherche et les tiers qui peuvent créer un lien vers ou indexer l'ancienne URL. C'est donc pour le référencement, pas pour faire "fonctionner" votre application.
Donc, en résumé, dans cet ordre :
/server/ServerName
./server/?Server=ServerName
(ou/server/index.php?Server= ServerName) à
/server/?Server=ServerName
(或/server/index.php?Server=ServerName) 到
/server/ServerName
(URL canonique)./server/ServerName
(规范 URL/您要链接到的 URL)重写为/server/index.php?Server=ServerName
(l'URL canonique/l'URL vers laquelle vous souhaitez créer un lien) vers/server/index.php?Server=ServerName
(le fichier sous-jacent qui gère la requête).Dans le fichier racine
.htaccess
:Cela suppose que vous utilisez Apache 2.4 pour pouvoir utiliser le drapeau
END
dans la dernière règle. Cela évite d'avoir une condition supplémentaire dans la première règle qui vérifie les requêtes directes au lieu des requêtes "réécrites" (pour éviter les boucles de redirection).Dans la première règle ("Redirect"), la partie
précédente. Le paramètre URLindex.php
est facultative. La référence arrière%1
contient la valeur du paramètre URLServeur
capturé dans laindex.php
部分是可选的。%1
反向引用包含在前面的条件中捕获的Server
URL 参数的值。Server
conditionServeur
doit être non vide et ne pas contenir de points ou de barres obliques (selon l'expression régulière que vous avez donnée dans la règle précédente), sinon il ne sera ni redirigé ni réécrit. Notez que les points littéraux dans les classes de caractères d'expression régulière ne nécessitent pas d'échappement par barre oblique inverse. 🎜Veuillez noter que je suppose (sur la base de votre exemple) que l'URL demandée ne se termine pas par une barre oblique finale (c'est-à-dire
. Bien que votre extrait de journal semble suggérer le contraire ? Si vous devez autoriser les URL avec barre oblique finale et sans barre oblique finale, cela doit alors être implémenté en tant que « redirection » distincte afin de normaliser l'URL, plutôt que dans le cadre d'une « réécriture » qui autrement favoriserait le contenu en double (barres obliques). et les URL sans barres obliques sont des URL différentes)./server/ServerName
plutôt que/server/ServerName/), j'ai donc supprimé la dernière règle facultative
),因此我删除了/?
à la fin deRewriteRule
/server/ServerName
而不是 /server/ServerName/RewriteRule
pattern 末尾的可选/?
patternServer
URL 参数值中期望的值,NE
(noescape
) 标志可能是也可能不是必需的。QUERY_STRING
URL codée en fonction de vos.htaccess
中使用PT
(passthrough
) 标志,因为这是此上下文中的默认行为。 (PT
Vous n'avez pas besoin d'utiliser le drapeau qui n'est pertinent que lors de l'utilisation de mod_rewrite dans un contexte server ou vhost