Ограничить правило перезаписи, чтобы исключить определенный каталог - PullRequest
0 голосов
/ 13 сентября 2010

Когда правило переписывания позволяет нам создавать дружественные URL с идентификатором. История только проходит через идентификационный номер, поэтому текст в конце не имеет значения.

RewriteRule ^news/([0-9]+)$    /news/$1/ [R=301,L]
RewriteRule ^news/([a-zA-Z0-9_-]+)/.*$ /news/story.php?id=$1

Наша проблема возникает, когда любой файл, связанный с / news / images /, также перенаправляется. Поэтому все, что отображает изображение из / news / images /, не работает.

Может ли кто-нибудь мне помочь? Как мы можем ограничить перезапись так, чтобы она гласила: «Если она находится в подкаталоге / images /, не переписывать путь»?

1 Ответ

1 голос
/ 13 сентября 2010

Вы можете выбрать простой маршрут и просто избежать перезаписи, если файл существует:

RewriteRule ^news/([0-9]+)$    /news/$1/ [R=301,L]

# Ignore the RewriteRule if the request points to a file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond $1 !=tags [NC]
RewriteRule ^news/([a-zA-Z0-9_-]+)/.*$ /news/story.php?id=$1

В качестве альтернативы, если вы хотите выполнить проверку каталога в случае, если запрос ресурса не указывает на реальныйфайл, но должен напрямую генерировать ответ 404, вы можете попробовать следующее:

RewriteRule ^news/([0-9]+)$    /news/$1/ [R=301,L]

# Check if the path segment after /news/ corresponds to an existing directory
# and if so, don't perform the rewrite
RewriteRule %{DOCUMENT_ROOT}/news/$1/ !-d
RewriteCond $1 !=tags [NC]
RewriteRule ^news/([a-zA-Z0-9_-]+)/.*$ /news/story.php?id=$1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...