mod_rewrite / перенаправление с?в строке запроса - PullRequest
1 голос
/ 12 сентября 2011

Я впервые изучаю использование переписывания htaccess / mod, и у меня возникли небольшие проблемы с редиректом / маской.

В моей корневой папке есть тестовый каталог с именем modrw, в этой папке есть файл index.php с простым и приятным:

<?php echo $_GET['name']; ?>

В браузере, если я наберу www.domain.com/modrw/{word}/, тогда слово отображается на странице, что я и хочу.

Если я наберу www.domain.com/modrw/name={word}, то меня перенаправят на www.domain.com/modrw/{word}/, и слово также будет отражено, как я и предполагал.

Однако, если я указываю браузеру URL-адрес www.domain.com/modrw/?name={word}/, слово отображается, но меня не перенаправляют на www.domain.com/modrw/{word}/, как я и надеялся.

Как ? вызывает проблемы? В коде RewriteRule ниже ? включен, я пробовал несколько разных способов, но не могу заставить его работать.

Вот мой файл htaccess:

RewriteEngine on

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{REQUEST_URI} ^/[^\.]+[^/]$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L]

RewriteRule ^modrw/?name=([^/\.]+)/?$ http://www.domain.com/modrw/$1 [R]
RewriteRule ^modrw/([^/\.]+)/?$ modrw/?name=$1

В чем причина проблемы, есть ли конкретный способ включить ?, он вообще не подхватывает это? Я принимаю совершенно неправильный подход?

Я также пытался использовать Options +FollowSymlinks, но я не совсем уверен, что это делает, и не нужно ли это вообще ...

1 Ответ

3 голосов
/ 12 сентября 2011

Помните, что RewriteRuleonly соответствует REQUEST_URI. Для сопоставления строки запроса вы должны использовать RewriteCond с переменной% {QUERY_STRING}. Например в вашем случае:

RewriteCond %{QUERY_STRING} ^name=(.*)(&|$) [NC]
RewriteRule ^modrw /modrw/%1? [L,R,NC]
...