Что я делаю неправильно на этом файле HTACCESS? - PullRequest
1 голос
/ 07 апреля 2010

Кто-нибудь, скажите, пожалуйста, что не так с этими правилами htaccess?

 RewriteCond %{QUERY_STRING} ^q=(.*)&type=downway1$ [NC]
 RewriteRule ^search\.php$  /search\/%1\/1\/? [R=301,NC,L]

 RewriteCond %{QUERY_STRING} ^q=(.*)&type=(.*)$ [NC]
 RewriteRule ^search\.php$  /search\/%1\/%2\/1\/? [R=301,NC,L]

 RewriteRule search/(.*)/(.*)/$  /search.php?q=$1&page=$2 [L] <-- this and
 RewriteRule search/(.*)/(.*)/(.*)/$  /search.php?q=$1&type=$2&page=$3 [L] <-- this 

не работают одновременно. например, TYPE = app Q = windows

если я ищу тип по downway1, он работает мощно, но если я ищу в приложении типа Q, он становится windows / app, а не только windows. помогите мне пожалуйста!

edit: я пытаюсь перенаправить "search.php?q=someterm&page=1" на "/search/someterm/1/" и "search.php?q=someterm&type=sometype&page=1" на "/search/sometype/someterm/1/"

1 Ответ

1 голос
/ 07 апреля 2010

Правила перезаписи применяются по порядку. В этом случае сначала проверяется /search/(.*)/(.*)/$, а на самом деле соответствует совпадению /search/windows/app/1/, поскольку оператор точки соответствует всему, включая косые черты .

Попробуйте изменить порядок правил или, что еще лучше, сделать их независимыми, изменив (.*) на ([^/]*), что означает совпадать со всеми , кроме косых черт . Это сделает первый тест неудачным для /search/windows/app/1/, поэтому apache перейдет ко второму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...