.htaccess mod_rewrite противоречит правилам - PullRequest
0 голосов
/ 15 марта 2012

У меня есть следующие правила переписывания:

    Options +FollowSymLinks
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !\.(css|gif|ico|jpg|js|png|swf|txt)$


    RewriteCond %{REQUEST_URI} !^/(Account|Logout|Password|Tags) [NC]
    RewriteRule ^([^/]*)$ /index.php?city=$1 [QSA,L]


    RewriteCond %{REQUEST_URI} ^/Account [NC]
    RewriteRule ^Account /members/account.php [NC,L]

    RewriteCond %{REQUEST_URI} ^/Logout [NC]
    RewriteRule ^Logout /members/logout.php [NC,L]

    RewriteCond %{REQUEST_URI} ^/Password [NC]
    RewriteRule ^Password /members/password.php [NC,L]

    RewriteCond %{REQUEST_URI} ^/Tags [NC]
    RewriteRule ^Tags /members/tags.php [NC,L]

Я пытаюсь добавить еще одно условие, чтобы оно загружалось как

  domain.com/$city/$provider/$name

это правило:

  RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ /listing.php?city=$1&provider=$2&urlname=$3 [L]

Моя проблема в том, что это правило конфликтует с правилом для моего индексного файла, который загружается как domain.com/$city.

Буду очень признателен за любые предложения.

Спасибо!

1 Ответ

1 голос
/ 15 марта 2012

В ваших правилах нет ничего плохого. Просто первый охватывает последний с точки зрения того, что он примет. Самый простой способ избежать этой проблемы - переместить более ограничительное правило, приведенное выше, в более общее. То есть в этом случае поместите правило листинга непосредственно перед правилом index.php.

Добавление

Упс, - - перечисление.php, за которым следуют правила -> indexp.php, все равно будет зацикливаться, потому что правило 1 срабатывает при первом проходе, а затем правило 2 при втором, поскольку строка запроса удаляется для целей сопоставления регулярному выражению в править; и "listing.php соответствует ^([^/]*)$.

Вы должны соответствовать ^([^/]*)$ только в том случае, если шаблон не соответствует существующему файлу. Способ предотвратить это - поставить

RewriteCond %{REQUEST_FILENAME} !-f

перед правилом index.php.

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