.htaccess RewriteCond протестирован после перезаписи - PullRequest
0 голосов
/ 07 января 2011

Последние два часа я безуспешно пытался заставить что-то работать.Я искал помощи в Google и Apache Docs, но я до сих пор не могу найти выход из этого.Вот в чем дело:

У меня есть два файла:

index.php
public/css/screen.css

Я хочу, чтобы любой URL, набранный в браузере, перенаправлялся на index.php? Url = $ 1, если это не файл.Если это так, он должен перенаправить на public / $ 1.Я попытался использовать следующие правила перезаписи:

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?url=$1 [QSA,L]

К сожалению, поскольку перезапись происходит только после выполнения RewriteCond, первые два RewriteCond будут проверять css / screen.css вместо public / css / screen.css,

Существует ли магический флаг, который сообщает apache, что RewriteRule проверяет, верны ли значения RewriteConds, а затем отменяет перезапись, если нет?Как бы вы, ребята, сделали это?

Спасибо

1 Ответ

0 голосов
/ 07 января 2011

RewriteRule сравнивается первым, но замещение не происходит, если не совпадают все условия - вы не можете влиять на это напрямую.

Так как REQUEST_FILENAME в .htaccess - это то, на что сервер уже сопоставил URL, вы должны сделать, например,

RewriteCond% {DOCUMENT_ROOT} / public / $ 1 -f RewriteRule (. *) Public / $ 1 [L]

, где $ 1 - это «остаток» того, что было первоначально запрошено

Вам также понадобится правильная RewriteBase, поскольку вы переписываете на относительный URL.

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