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]