2011-01-12 1 views
0

У меня возникли проблемы с написанием правила для следующей проблемы в .htaccess. Вот что мне нужно..htaccess 301 проблема перенаправления

КОГДА ЭТО URL

www.mysite.com/cat/2011/subcat1/subcat2/product.htm?page=2 

НУЖНО 301 REDIRECT К НАСТОЯЩЕМУ

www.mysite.com/cat/2011/subcat1/subcat2/product/2.htm 

Можете ли вы сказать мне, как это сделать?

Благодаря

ответ

4

----- отредактирован и ПРОВЕРЕНО ОТВЕТ ----------

RewriteEngine On 
RewriteCond %{QUERY_STRING} page=(\d+) 
RewriteRule ^cat/(\d+)/([^/]+)/([^/]+)/product\.htm http://www.mysite.com/cat/$1/$2/$3/product/%1.htm? [R=301,L] 
  • RewriteRule соответствует только часть URL, а не строка запроса. Таким образом, RewriteCond используется для соответствия строке запроса.
  • Обратите внимание, что совпадения из url используются как $ N, а совпадение из строки запроса используется как% N
  • В конце перезаписанного URL есть знак вопроса. Это предотвращает добавление исходной строки запроса к новому переписанному URL-адресу.

Для любого числа subcats:

RewriteEngine On 
RewriteCond %{QUERY_STRING} page=(\d+) 
RewriteRule ^cat/(\d+)/(.+)/product\.htm http://www.mysite.com/cat/$1/$2/product/%1.htm? [R=301,L] 
+0

Спасибо. Позвольте мне попробовать это, а затем я вернусь. – Ali

+0

В предыдущем ответе возникла проблема. Я отредактировал ответ, а также протестировал его работу. Он использует RewriteCond и ReWriteRule. –

+0

Хорошо, я не использовал ваш метод, потому что у меня возникла небольшая проблема, так как количество подката не было исправлено. Иногда это может быть 2, иногда 3 и иногда 4 или более (это динамический), поэтому я сделал это через PHP. Я не уверен, есть ли способ решить эту проблему путем перезаписи URL-адресов, поэтому я использовал PHP. Но я принял ваш ответ, потому что я проверил его с этим текущим состоянием, где есть только два подката, и это сработало. Благодаря! – Ali