2013-05-09 4 views
0

У меня есть файл .htaccess, который переписывает URL, для целей SEOНесколько правил перезаписи в HTAccess

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /display.php?page=$1 [L,NC,QSA] 
RewriteRule ^search/([^/\.]+)/?$ search.php?what=$1&where=$2 [L,NC,QSA] 

Теперь первое правило перезаписи работает отлично. (www.domain.com/user переходит на display.php? page = user) , но второй должен работать как (www.domain.com/search/something/else должен перейти к search.php? what = something & где = еще

Что я делаю неправильно здесь

ответ

0

Вы используете [L] флаг, который causes mod_rewrite to stop processing the rule set

Попробуйте удалить L флаг из первого правило перезаписи, как это:?.

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /display.php?page=$1 [NC,QSA] 
RewriteRule ^search/([^/\.]+)/?$ search.php?what=$1&where=$2 [L,NC,QSA] 
+0

Пробовал, но это не сработало. Любые другие предложения? – deanharber

+0

Вам не хватает '/' перед 'search.php'? Не должно быть '/search.php? What = $ 1 & where = $ 2' – Axel

+0

Нет, никаких изменений. Кажется, он должен быть там, но – deanharber

1

Ваше второе правило неверно для того, что вы ищете. Вы запрашиваете результат двух захватов, но делаете только один захват.

Попробуйте вместо этого:

RewriteRule ^search/([^/\.]+)/([^/\.]+)/?$ search.php?what=$1&where=$2 [L,NC,QSA] 

Edit: Кроме того, вы должны переключить свои правила вокруг. Ваше первое правило захватывает все, и поэтому отбрасывает второе.

Итак, поменяйте их и используйте флаг L, как уже было предложено.

+0

Не работает, я понимаю, что вы имеете в виду. Но я не получаю первый захват, даже если я удалю второй. – deanharber

+1

Какой выход вы получаете? (Кроме того, вам нужно будет переключать свои правила. Таким образом, 'search' должен быть первым.) –

Смежные вопросы