2014-10-23 2 views
1

Я хотел бы получить доступ к следующему адресу:Простые переписывают не работает

http://example.com/test/?key=123 

и получить содержимое http://example.com/index.php?q=123 вместо

Я пытался с этими правилами:

RewriteCond %{QUERY_STRING} key=(.*) 
RewriteRule /test/.* /index.php?q=%1 [L] 

но он не работает. Есть ли способ сделать эту работу?

+3

'ключ = 123' это не QUERY_STRING - это REQUEST_URI и QUERY_STRING является то, что приходит после того, как' ' – Cheery

+0

Да, извините, это на самом деле http://example.com/test/?key=123, но он не работает ... – Zed

+0

У вас есть .htaccess в '/ test /' или в корне? Или вы помещаете в файл .conf? – Cheery

ответ

0

Попробуйте удалить главную косую черту на /test/.* или заменить ее на ^, то есть test/.* или ^test/.*. Проблема в том, что ведущая косая черта не является частью запроса при использовании правил перезаписи .htaccess.

Смотрите примечание here под Per-каталог переписывает

Удаленный префикс всегда заканчивается косой чертой, то есть согласование происходит на строку, которая никогда не имеет ведущую косую черту. Следовательно, шаблон с ^/никогда не совпадает в контексте контекста.

Я также очистить матч строки запроса использовать

RewriteCond %{QUERY_STRING} key=([^&]+) 
RewriteRule ^test/.* /index.php?q=%1 [L] 
+0

Держу пари, вы имели в виду 'RewriteRule^test/$ \t index.php? Q =% 1 [L]' вместо 'RewriteRule^test /?.* /index.php?q=%1 [L]' (который также соответствует 'http: //example.com/testanythinghere/? key = 123') – kums

+0

@kums возможно. Я просто отредактирую его, чтобы сделать косую черту необязательной – Phil

Смежные вопросы