Quelle est la différence de syntaxe entre p> si je frappe http: // localhost / help , il va à # 1, si je frappe http: // localhost // aidez cela va toujours à # 1. P> AM I DROITAIRE EN SOIDE DE LA SLASH DE PREMIER DANS LE PREMIER ARGUMENT DE RECRIPRÉDRIBULE est essentiellement ignoré? P> Aussi, pourquoi ne pas fonctionner la règle de réécrire? P> ADRICHER argument: erreur? h2>
RewriteRule help /help.php [L] #1
5 Réponses :
Concernant Double Slashes: la plupart des serveurs Web s'effondrent silencieusement de multiples tabas dans une seule barre obliqueque tôt dans le pipeline de traitement de la requête. Cela est vrai pour au moins Apache, Tomcat et Jetty. La plupart des systèmes de fichiers basés sur UNIX fonctionnent de la même manière. Si vous voulez vraiment vérifier cela, vous devez faire quelque chose comme:
La manière dont les travaux de Rewriterle sont que si l'expression régulière donnée correspond à n'importe quelle partie de la partie de chemin de l'URL (la pièce après l'hôte et le port, mais avant la chaîne de requête), la partie de chemin complète est complètement remplacée par celle donnée. substitution. Cela explique le comportement que vous voyez dans la première partie de votre question. P>
Je ne suis pas sûr de ce qui pourrait causer les 500 erreurs sur la deuxième partie; Peut-être que l'effondrement des barres tables doublées n'arrive pas après la course du moteur de réécriture puis génère une erreur de serveur. P>
Notez également que, à moins que vous spécifiez un drapeau de poursuite spécial (que je ne me souvienne pas), de nouvelles règles de réécriture ne sont pas appliquées après avoir trouvé un match; et la correspondance arrive de premier à durer parmi celles spécifiées.
assez étrangement, la règle ci-dessus échoue et ne correspond jamais. p> Cette règle: p> RewriteRule ^/help /help.php [PT]
Il semble que la principale slash correspond effectivement si vous mettez la règle dans la configuration VHOST, mais pas dans un contexte de répertoire.
Fait intéressant, redirectmatch code> a besoin de la barre oblique de tête dans le motif
La raison de l'erreur 500 est une boucle infinitive: p>
alors que si la règle réécrit l'aide à aider, Apache est suffisamment intelligente pour abandonner la réécriture à ce stade. P>
Non, c'est en raison de la barre oblique de la destination de la ré-écriture rend le DEST interprété comme une voie absolue à un fichier sur le disque dur, voir ma réponse
(cela peut être très déroutant si vous avez utilisé L'erreur de serveur est causée par une boucle infinie. "Aide" devient "/help.php" qui est ensuite assortie par la même directive qui a réécriture. Donc, après le premier match, "/help.php" devient "/help.php" entraînant infiniment une URL qui ne peut pas être résolue. P>
Je crois que ces boucles peuvent être corrigées avec le drapeau aide code> correspond à "Aide" n'importe où sur le chemin. P>
/ help code> correspond à rien puisque la directive
Rewriterule code> omet la barre oblique à des fins de correspondance (c'est-à-dire que vous devez utiliser
^ code>, pas
/ code> ou
^ / code>, pour référencer le répertoire actuel). P>
% {request_uri} code> dans
réécritecond code> car
% {request_uri} code> code> code> em> commencer par une barre oblique. Lors de la correspondance contre
% {request_uri} code>,
^ code> et
^ / code> sont équivalents et un nom de répertoire Toujours être précédé d'un caractère SLASH, que ce soit ou non dans le répertoire de niveau supérieur.) P>
extrémiser code> (c.-à-d.
[fin] code>), mais ce drapeau nécessite Apache 2.3.9, tandis que Apache 2.2 semble être plus courant dans le déploiement. Il serait probablement préférable de réparer toute façon l'expression régulière;
^ help $ code> semblerait être le meilleur choix ici. P>
Que se passe-t-il si vous changez l'ordre des deux rédreilleurs? Si les premiers matchs (et cela le fait), le second ne se fait pas exécuter.
une raison particulière qui tente d'utiliser des doubles slashes dans une URL?
@Konerak ah oui, tu as raison. @yoda j'essayais simplement d'obtenir la deuxième règle d'appliquer