мод_перезапись:почему это работает локально, а не онлайн?
-
03-07-2019 - |
Вопрос
Я разрабатываю приложение локально (под доменным именем <мойдомен>.dev).
Чтобы работать с дружественными URL-адресами, я настроил свой .htaccess следующим образом:
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
Он работает нормально.Досадно, что при выходе в интернет все не так здорово:
http://example.com/issue/my-slug/#23 не возвращает переменную GET.Почему?
Решение
Основываясь на прошлом опыте, я предполагаю, что это RewriteBase, вероятно, потому, что вы используете общий сервер или какую-то другую нестандартную конфигурацию.
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
Другие советы
я этого не вижу
RewriteRule ^(([a-z0-9._\-]+/)*[a-z0-9_\-]+)$ http://mydomain.eu/$1/?%{QUERY_STRING}[NC,R,L]
должен соответствовать этому URL-адресу, но это единственный URL с флагом [R], который выполняет внешнее перенаправление.Попробуйте закомментировать эту строку, чтобы убедиться, что какая-то другая часть вашего приложения не выполняет перенаправление.Я предполагаю, что так оно и есть.
Между URL-адресом замены и флагами отсутствует пробел.Вы также можете упростить свое первое правило следующим образом:
RewriteRule ^([a-z0-9._-]+/)*[a-z0-9_-]+$ %{REQUEST_URI}/ [NC,R=301,L]