2010-12-03 2 views
17

Я часто вижу в приложениях PHP MVC Апачи RewriteRule, который выглядит следующим образом:Apache RewriteRule, - (тир) как замена

RewriteRule ^.*$ - [NC,L] 

Документы на Apache говорят:

Прочерк означает, что не требуется замена (существующий путь передается через нетронутый). Это значение используется, когда для изменения флага (см. Ниже) необходимо использовать без изменения пути.

Так что из того, что я собираюсь, вы можете использовать это, чтобы преобразовать путь с использованием флага i.e [NC] для RewriteRules?

Может кто-нибудь, пожалуйста, объясните эту черту RewriteRule немного лучше?

+0

Я использовал это «ничего не делать» синтаксис для предотвращения правил .htaccess родительской папки от выполнения. Это было полезно с Apache 2.2. Если вы используете Apache 2.4, вы можете просто использовать «RewriteOptions IgnoreInherit», чтобы избежать правил перезаписи родительской папки. – maganap 2016-10-26 11:16:52

ответ

11

Смотрите этот ответ:

mod_rewrite: what does this RewriteRule do?

Это по существу означает, что "ничего не делать, если предыдущее RewriteConds матч". Следующий RewriteRule (s) вместо этого сделает что-то еще, когда RewriteConds не совпадают. В случае сообщения, с которым я связал вас, следующий RewriteRule перезаписывает URL-адрес, включая «index.php».

+0

Так что это вроде как оператор другого. Или это то же самое, что префикс восклицательного знака (!) Ко всему моему RewriteCond? Я попытался найти ответ, но все они касались RewriteRules и избежания тире. – Cobby 2010-12-04 00:14:07

7

Я знаю, что это своего рода старое, но в основном говорится: «Эй, я могу использовать Rewrite, но для URL-адресов, соответствующих вышеуказанным RewriteCond (s), оставьте это и остановитесь».

EX:

# If file or directory exists, we wanna send them there 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule .* - [L] 

# Otherwise, use our smart page handler! 
RewriteRule ^(.*)\.php$ virtualPage.php?page=$1 [L] 
Смежные вопросы