2015-11-03 4 views
2

Вот мой файл .htaccess:RewriteCond не заканчивая правилами

RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} -f 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule !(abcdefg) index.php 
RewriteRule ^(.*)$ index.php?url=$1 [PT,L] 

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

Однако, если файл или каталог существует, он не работает и загружает его под ?url=filename.png в любом случае (когда он должен просто загрузить /filename.png).

Что я делаю неправильно?

ответ

1

Это потому, что RewriteCond применим только к следующему RewriteRule не все правила. И вы должны использовать !-f и !-d, чтобы избежать совпадения файлов. & каталогов.

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

RewriteEngine on 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule !(abcdefg) index.php [L] 

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

Или лучше один:

RewriteEngine on 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 

RewriteRule !(abcdefg) index.php [L] 

RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 
+0

Спасибо, но это правило не совсем работает до сих пор. Если я загружаю/любую страницу, он возвращает значение 404. (ожидается index.php? Url = anypage) –

+1

Лучше работает! Думаю, потому что это лучше. Благодарю. –

Смежные вопросы