Директива RewriteRule

KuBalDa
На сайте с 26.09.2010
Offline
30
406

Можно ли использовать в .htaccess такой код


RewriteEngine on
RewriteRule ^list/([a-z0-9\.\-_]*)/$ /list.php?category=$1 [L]
RewriteRule ^list.php?category=([a-z0-9\.\-_]*)$ /list/$1/ [R=301,L]

Если да, то почему при переходе на list.php?category=news, редирект происходит на list/?category=news

skAmZ
На сайте с 04.09.2009
Offline
122
#1

Вот что вы хотели.


RewriteEngine on
RewriteRule ^list/([a-z0-9\.\-_]*)/$ /list.php?category=$1 [L]

RewriteCond %{QUERY_STRING} category=([a-z0-9\.\-_]+)
RewriteRule ^list.php?$ /list/%1/? [R=301,L]

Но делать нельзя, получается бесконечный редирект.

KuBalDa
На сайте с 26.09.2010
Offline
30
#2
skAmZ:
Вот что вы хотели.

RewriteEngine on
RewriteRule ^list/([a-z0-9\.\-_]*)/$ /list.php?category=$1 [L]

RewriteCond %{QUERY_STRING} category=([a-z0-9\.\-_]+)
RewriteRule ^list.php?$ /list/%1/? [R=301,L]

Но делать нельзя, получается бесконечный редирект.

В общем то я это уже заметил, но решил эту проблему по другому, с помощью PHP.

В list.php добавил следующие строки, для редиректа


$request_uri = getenv("REQUEST_URI"); //Берем параметры адресной строки

//Если они соответствуют list.php?category=<текст>,
//то перенаправляем на list/<текст>/

if(preg_match('!/list\.php\?category=([a-z0-9\.\-_]*)!si',$request_uri,$text))
{
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://site.ru/list/$text[1]/");
exit();
}

В .htaccess оставил следующие строки


RewriteEngine on

#Перенаправляем на страницу со слэшем в конце
RewriteRule ^list$ /list/ [R,L]
#Выводим содержимое list.php
RewriteRule ^list/$ /list.php [L]

#Перенаправляем на страницу со слэшем в конце
RewriteRule ^list/([a-z0-9\.\-_]*)$ /list/$1/ [R,L]
#Выводим содержимое list.php?category=<текст>
RewriteRule ^list/([a-z0-9\.\-_]*)/$ /list.php?category=$1 [L]

Если есть какие либо замечания, то с радостью выслушаю

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий