Возможен ли бесконечный цикл в mod_rewrite? - PullRequest
0 голосов
/ 01 октября 2010

Я работаю над перестройкой структуры URL страниц обзора, которая может быть отфильтрована по городу, округу, количеству звезд и техническому специалисту.Я хочу, чтобы страницы выглядели как статические HTML-страницы, а также заменяли плюсы дефисами.Моя цель: -применить URL-адреса нового стиля без изменения страницы отзывов, просто файл htaccess -установить 301 переадресацию из URL-адресов старого стиля в URL-адреса нового стиля -конвертировать плюсы в дефисы

В настоящее время URL-адреса обзора выглядят следующим образомэто:

domain.com / reviews /? city = город + имя

domain.com / reviews /? city = город + имя & страница = 2

домен.com / reviews /? county = County + Имя

domain.com / reviews /? county = County + Name & page = 2

domain.com / reviews /? stars = 4

domain.com / reviews /? Stars = 4 & page = 2

domain.com / reviews /? Tech = Tech + Имя

domain.com / reviews /? Tech = Tech +Name & page = 2

Моя цель - сделать так, чтобы они выглядели так (и 301 старые URL-адреса для URL-адресов нового стиля):

domain.com / reviews /city ​​/ City-Name.html

domain.com / reviews / city / City-Name / page / 2.html

domain.com / reviews / county / County-Name.html

domain.com / reviews / county / County-Name / page / 2.html

domain.com/reviews/stars/4.html

domain.com / reviews / stars / 4 / page / 2.html

domain.com / reviews / tech / Tech-Name.html

domain.com / reviews / tech / Tech-Name / page / 2.html

Названия городов, округов и технологий не всегда содержат плюсы (например, Бостон против Новых+ Йорк) а у некоторых больше одного плюса.В настоящее время это то, что я должен замаскировать URL-адреса старого стиля с URL-адресами нового стиля (кстати, это прекрасно работает):

##FIRST PAGE REVIEWS (ie. reviews/city/city-name.html)
RewriteRule ^reviews/(.*)/(.*)\-(.*)\-(.*)\-(.*)\-(.*)\.html "/reviews/?$1=$2+$3+$4+$5+$6" [NC,L]
RewriteRule ^reviews/(.*)/(.*)\-(.*)\-(.*)\-(.*)\.html "/reviews/?$1=$2+$3+$4+$5" [NC,L]
RewriteRule ^reviews/(.*)/(.*)\-(.*)\-(.*)\.html "/reviews/?$1=$2+$3+$4" [NC,L]
RewriteRule ^reviews/(.*)/(.*)\-(.*)\.html "/reviews/?$1=$2+$3" [NC,L]
RewriteRule ^reviews/(.*)/(.*)\.html "/reviews/?$1=$2" [NC,L]

##PAGINATED REVIEWS (ie. reviews/city/city-name/page/2.html)
RewriteRule ^reviews/(.*)/(.*)\-(.*)\-(.*)\-(.*)\-(.*)/page/(.*)\.html "/reviews/?$1=$2+$3+$4+$5+$6&page=$7" [NC,L]
RewriteRule ^reviews/(.*)/(.*)\-(.*)\-(.*)\-(.*)/page/(.*)\.html "/reviews/?$1=$2+$3+$4+$5&page=$6" [NC,L]
RewriteRule ^reviews/(.*)/(.*)\-(.*)\-(.*)/page/(.*)\.html "/reviews/?$1=$2+$3+$4&page=$5" [NC,L]
RewriteRule ^reviews/(.*)/(.*)\-(.*)/page/(.*)\.html "/reviews/?$1=$2+$3&page=$4" [NC,L]
RewriteRule ^reviews/(.*)/(.*)/page/(.*)\.html "/reviews/?$1=$2&page=$3" [NC,L]

Часть, с которой у меня возникают проблемы, заключается в том, чтобы 301-й URL-адреса в старом стилеНОВЫЙ стиль URL.Это то, что у меня есть:

RewriteCond %{QUERY_STRING} (.*)=(.*) [NC]
RewriteRule ^reviews/(.*) /reviews/%1/%2.html? [NS,R=301,NC]

RewriteCond %{QUERY_STRING} (.*)=(.*)&page=(.*) [NC]
RewriteRule ^reviews/(.*) /reviews/%1/%2/page/%3.html? [NS,R=301,NC]

Когда я пытаюсь использовать этот FireFox, выдается сообщение об ошибке «Страница перенаправляется неправильно».Есть идеи?

1 Ответ

0 голосов
/ 01 октября 2010

Да, это, вероятно, бесконечный цикл. Вместо этого используйте THE_REQUEST для проверки строки запроса :

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /[^?\ ]*\?([^=]+)=([^\ ]*)&page=([^\ ]*) [NC]
RewriteRule ^reviews/ /reviews/%1/%2/page/%3.html? [NS,R=301,NC]
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /[^?\ ]*\?([^=]+)=([^\ ]*)
RewriteRule ^reviews/ /reviews/%1/%2.html? [NS,R=301,NC]

Обратите внимание, что это не удастся, если число или порядок параметров отличается от этого.

...