перенаправление перенаправления .htaccess

htaccess включен, у меня работает канонизация (no-www to www.)

Я пытаюсь использовать htaccess для выполнения следующих

www.domain.com/page.php?i=Page1 www.domain.com/page.php?i=Page2 

к

 www.domain.com/Page1 www.domain.com/Page2 

Я пробовал использовать этот фрагмент кода, пока не повезло:

 rewriterule ^([a-zA-Z0-9_-]+)/$ page.php?i=$1 

Однако я думаю, что иду наоборот. Я не могу найти пример для этого. У меня есть это, но я не могу заставить его работать.

Попробуй это:

 RewriteEngine On RewriteCond %{REQUEST_URI} ^/page\.php$ RewriteCond %{QUERY_STRING} ^i=([a-zA-Z0-9_-]+)$ RewriteRule ^(.*)$ http://www.domain.com/%1? [R=302,L] 

взято из: http://www.simonecarletti.com/blog/2009/01/apache-query-string-redirects/

Вы хотите, чтобы www.domain.com/Page1 был видимым в адресной строке браузера, но внутри этого URL- /page.php?i=Page1 должен быть /page.php?i=Page1 . В этом случае проблема заключается в завершении / в вашем регулярном выражении:

 Rewriterule ^([a-zA-Z0-9_-]+)/$ page.php?i=$1 ^---here 

У вашего желаемого /Page1 url нет конечной косой черты, но для вашего regex regex требуется одно, поэтому шаблон не соответствует, и переписывание не происходит. Попробуйте удалить / и посмотреть, поможет ли это:

 Rewriterule ^([a-zA-Z0-9_-]+)$ page.php?i=$1 ^---no / 

Чтобы разобрать строку запроса, вам необходимо получить к ней доступ в RewriteCond

 # We need this line because /page.php?i=page.php will cause an infinite loop RewriteCond %{QUERY_STRING} !i=page.php # Now we parse out the value of i from the query string RewriteCond %{QUERY_STRING} i=([^&]+) RewriteRule ^page.php /%1 [L]