2010-10-01 2 views
0

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

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

domain.com/reviews/?city=City+Name

domain.com/reviews/?city=City+Name & страница = 2

domain.com/reviews/?county=County+Name

domain.com/reviews/?county=County+Name & страница = 2

domain.com/reviews/?stars=4

domain.com/reviews/?stars=4 & страница = 2

domain.com/reviews/?tech=Tech+Name

domain.com/reviews/?tech=Tech+Name & страница = 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-стиля к NEW стиль 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 дает мне «страница не перенаправлять правильно» ошибка. Есть идеи?

ответ

0

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

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] 

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

+0

Отлично! Спасибо, что сработали. Единственное, что мне нужно, чтобы преобразовать плюсы в дефисы. В настоящее время «/ reviews /? City = City + Name» приведет вас к «/reviews/city/City+Name.html», где должно быть «... City-Name.html». Также есть способ конвертировать все в нижний регистр? – Yev

+0

@Yevgeniy Женя Ван Чучин: Хотя это возможно с помощью mod_rewrite, это довольно сложно, так как вы можете только заменить фиксированное количество вхождений за раз (см., Например, http://stackoverflow.com/questions/3791548/mod-rewrite -правил-к-исполнение-канонические проценты, кодирующий/3806538 # 3806538). Язык более высокого уровня лучше всего подходит для такого рода работ. – Gumbo

+0

Я в порядке с фиксированной суммой. 5 случаев - это много, это то, что я делаю в первой части (маскирование старых стилей с новым стилем). – Yev