Apache RewriteRule, - (тире) в качестве замены - PullRequest
18 голосов
/ 04 декабря 2010

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

RewriteRule ^.*$ - [NC,L]

В документации по Apache сказано:

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

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

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

Ответы [ 2 ]

12 голосов
/ 04 декабря 2010

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

mod_rewrite: что делает этот RewriteRule?

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

8 голосов
/ 28 апреля 2011

Я знаю, что это довольно старое, но оно в основном говорит: "Эй, я мог бы использовать 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...