Question

Je développe une application localement (sous Nom de domaine < mydomain > .dev ).

Afin de travailler avec des URL conviviales, j'ai configuré mon fichier .htaccess comme suit:

RewriteEngine on
# Externally redirect to add missing trailing slash
RewriteRule ^(([a-z0-9._\-]+/)*[a-z0-9_\-]+)$ http://example.com/$1/?%{QUERY_STRING}[NC,R,L]
RewriteRule ^about/$ about.php [NC,L]
RewriteRule ^issues/$ issues.php [NC,L]
RewriteRule ^issue/([a-z0-9_\-]+)/$ issue.php?slug=$1 [NC,L]

SetEnv PHP_VER 5
IndexIgnore *
Options +FollowSymLinks

Cela fonctionne bien. Chose embarrassante, quand on va en ligne, ce n’est pas si génial:

http://example.com/issue/my-slug/#23 ne renvoie aucune variable GET. Pourquoi?

Était-ce utile?

La solution

Je suppose que, d'après l'expérience passée, c'est RewriteBase, probablement parce que vous vous trouvez sur un serveur partagé ou sous une autre configuration non standard.

RewriteEngine on

#Set base as doc root.
RewriteBase /

# Externally redirect to add missing trailing slash
RewriteRule ^(([a-z0-9._\-]+/)*[a-z0-9_\-]+)$ http://mydomain.eu/$1/?%{QUERY_STRING}[NC,R,L]
RewriteRule ^about/$ about.php [NC,L]
RewriteRule ^issues/$ issues.php [NC,L]
RewriteRule ^issue/([a-z0-9_\-]+)/$ issue.php?slug=$1 [NC,L]

SetEnv PHP_VER 5
IndexIgnore *
Options +FollowSymLinks

Autres conseils

Je ne vois pas que

RewriteRule ^(([a-z0-9._\-]+/)*[a-z0-9_\-]+)$ http://mydomain.eu/$1/?%{QUERY_STRING}[NC,R,L]

devrait correspondre à cette URL, mais c’est le seul avec le drapeau [R] pour faire une redirection externe. Essayez de commenter cette ligne pour vous assurer qu’aucune autre partie de votre application n’effectue la redirection. À mon avis, il y en a une.

Il manque un espace entre l'URL de substitution et les indicateurs. Vous pouvez également simplifier votre première règle comme suit:

RewriteRule ^([a-z0-9._-]+/)*[a-z0-9_-]+$ %{REQUEST_URI}/ [NC,R=301,L]
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top