Apache mod_rewrite для всего, кроме root - PullRequest
6 голосов
/ 25 марта 2011

Привет. Я пытаюсь написать правило mod_rewrite для перенаправления всего, кроме корневой папки. Например, www.example.com должен загрузить файл index.html. Для всего остального, например www.example.com/tag, тег / необходимо передать в скрипт в подкаталоге

Прямо сейчас у меня есть

RewriteCond %{REQUEST_URI} !^/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) app/webroot/$1 [L]

И это прекрасно загружает index.html, но тег / не передается в webroot. Я получаю ошибку 404.

Спасибо

1 Ответ

9 голосов
/ 25 марта 2011

Это условие проблемы:

RewriteCond %{REQUEST_URI} !^/

Вы говорите, что все, что начинается с '/', не переписывается, и все начинается с '/'. Вам нужно использовать $ в конце:

RewriteCond %{REQUEST_URI} !^/$

Я не уверен, что вам вообще нужно правило, потому что, если index.html существует, другие два правила позаботятся об этом автоматически. Просто используйте их, чтобы переписать все, что не существует физически:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ app/webroot/$1 [L,QSA]

И вы можете обработать ошибку 404 в своем приложении, так как вам все равно придется обращаться к подкаталогам.

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