Переменные GET отображаются в URL на .htaccess Перезапись URL, которые не заканчиваются на / - PullRequest
0 голосов
/ 25 августа 2010

У меня проблема с переписыванием, выставляющим переменные GET, если исходящий запрос не завершается косой чертой (/).

Вот мое правило:

# All requests are routed to PHP
RewriteRule ^(.*)$ framework/index.php?framework=$1&%{QUERY_STRING} [L]

Если я посещаю:

http://www.domain.com/folder/

все прекрасно работает.Если я посещаю:

http://www.domain.com/folder

Меня перенаправляют на:

http://www.domain.com/folder/?framework=folder

Что дает?

1 Ответ

2 голосов
/ 25 августа 2010

Похоже, /folder существует в вашем веб-корне. Поскольку вы не отправили Apache URL-адрес, заканчивающийся косой чертой, а запрошенный ресурс является папкой, директива DirectorySlash принудительно перенаправляет на исправленный URL-адрес.

К сожалению, mod_rewrite проверяет ваш запрос до того, как произойдет перенаправление, и, хотя он не меняет URI, который используется при создании перенаправления, изменения, которые он вносит в строку запроса, не разделяются в способ, которым mod_dir знает, не включать их. Поэтому, когда перенаправление отправляется обратно в браузер, оно включает строку запроса, сгенерированную вашим RewriteRule.

Потенциальное решение этой проблемы (кроме отключения DirectorySlash, которое не рекомендуется по причинам, перечисленным в документации), состоит в том, чтобы выполнить работу mod_dir для него как часть вашего набора правил:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{HTTPS}s ^on(s)|off
RewriteRule [^/]$ http%1://%{HTTP_HOST}%{REQUEST_URI}/ [R=301,L]

RewriteRule ^(.*)$ framework/index.php?framework=$1 [QSA,L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...