Переписать игнорирование файлов в каталоге, когда он существует - PullRequest
0 голосов
/ 27 марта 2011

Я успешно использовал следующее переписывание, которое использует www.site.com/123/abc для указания на www.site.com/index.php?id=123&page=abc

RewriteEngine On
RewriteRule ^([0-9]+)$ http://%{HTTP_HOST}/$1/ [R,L]
RewriteRule ^([0-9]+)/(.*)$ /index.php?id=$1&page=$2 [L]

До сих пор.Когда каталог, который существует и соответствует $ 1, www.site.com/123/ файлы в каталоге / 123 /, я не имею доступа.Если я попытаюсь изменить перезапись на следующую, все будет работать, кроме файлов.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]+)$ http://%{HTTP_HOST}/$1/ [R,L]
RewriteRule ^([0-9]+)/(.*)$ /index.php?id=$1&page=$2 [L]

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

1 Ответ

0 голосов
/ 27 марта 2011

RewriteCond с применяются только к самому следующему RewriteRule. Поскольку у вас есть два правила, вам нужно повторить ваши условия.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]+)$ http://%{HTTP_HOST}/$1/ [R,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]+)/(.*)$ /index.php?id=$1&page=$2 [L]

Или вы можете отфильтровать файлы и каталоги вверху, прежде чем продолжить свои правила перезаписи:

# Do nothing if URL points to existing file or directory.
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule (.*) $1 [L]

RewriteRule ^([0-9]+)$ http://%{HTTP_HOST}/$1/ [R,L]
RewriteRule ^([0-9]+)/(.*)$ /index.php?id=$1&page=$2 [L]
...