mod_rewrite: warum es lokal und nicht online funktioniert?
-
03-07-2019 - |
Frage
Ich entwickle eine App vor Ort (unter Domain-Namen
Um mit freundlicher Urls zu arbeiten, ich habe meine .htaccess wie folgt aufgebaut:
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
Es funktioniert gut. Nervend, wenn Sie online gehen, es ist nicht so groß:
http://example.com/issue/my-slug/#23 gibt kein GET-Variable. Warum?
Lösung
Meine Vermutung, basierend auf den Erfahrungen der Vergangenheit ist RewriteBase, wahrscheinlich, weil Ihr auf einem gemeinsamen Server oder einem anderen Nicht-Standard-Konfiguration.
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
Andere Tipps
Ich sehe, dass nicht
RewriteRule ^(([a-z0-9._\-]+/)*[a-z0-9_\-]+)$ http://mydomain.eu/$1/?%{QUERY_STRING}[NC,R,L]
sollte diese URL übereinstimmen, aber das ist die einzige mit dem [R] Flagge eine externe Umleitung zu tun. Versuchen Sie diese Zeile aus zu kommentieren, um sicherzustellen, dass es nicht einige andere Teil Ihrer Anwendung ist die Umleitung zu tun. Meine Vermutung ist, dass es gibt.
Es gibt einige Leerzeichen zwischen der Substitution URL fehlt und die Fahnen. Sie können auch Ihre erste Regel vereinfachen wie folgt:
RewriteRule ^([a-z0-9._-]+/)*[a-z0-9_-]+$ %{REQUEST_URI}/ [NC,R=301,L]