htaccess RewriteRule: отфильтровать определенные слова - PullRequest
1 голос
/ 07 августа 2011

У меня есть

RewriteRule ^post/([^/]+)/([^/]+)$ /post/index.php?$1=$2 [NC]

, который делает то, что должен делать: возьмите URL-адрес типа post/color/black и превратите его в post/index.php?color=black.

Проблема заключается в том, что это также влияеттакие вещи, как таблица стилей (находится в post / styles / style.css) и другие файлы, которые действительно существуют.

Итак, вопрос в том, знаю ли я точные $_GET ключи, которые нужно перевести, какМогу ли я ограничить приведенный выше RewriteRule, чтобы он мог использовать его только для этих конкретных ключей, но оставил все остальное без изменений?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 07 августа 2011

Вы можете использовать:

^post/([^/]+)/(black|white|...)$

или

^post/([^/]+)/((?!bad keywords)[^/]+)$
3 голосов
/ 07 августа 2011

Вы можете либо:

  • Используйте флаг -f, чтобы исключить реально существующие ресурсы из процесса перезаписи, добавив следующие RewriteRules:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    
  • Или храните ваши статические ресурсы за пределами /post - это было бы лучше, потому что вы можете исключить вероятность коллизий со 100% -ной достоверностью и избавить Apache от просмотра файла (что актуально только для многих трафика хотя).

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