RewriteRule.? только для одного или нескольких символов? - PullRequest
1 голос
/ 22 февраля 2011

В сети я нашел несколько способов определения RewriteRule, например:

RewriteRule .? 404.php [L]
RewriteRule . 404.php [L]
RewriteRule ^ 404.php [L]

Но почему они будут работать при вводе URL-адреса для мусора?Потому что первый (.?) означает, что должен быть ноль или один символ, что привело бы к 404.php (не целая куча символов или слово).Аналогично, . и ^ ищут только символ и начало строки (не строку с несколькими символами или словами, верно?), Соответственно.Это то, что я думаю, основываясь на помощи RegEx.Я ошибся?Или ...?

Ответы [ 2 ]

0 голосов
/ 22 февраля 2011

Я не проверял, но я думаю, что это перенаправит абсолютно любой запрос на 404.php.

Регулярное выражение .? будет искать 0 или 1 символ, любой символ, в любой позицииURL-адрес.Таким образом, любой URL будет соответствовать первому регулярному выражению и будет перенаправлять.

[L] в конце строки заставляет mod-rewrite больше не обрабатывать правила при обнаружении совпадения.

0 голосов
/ 22 февраля 2011

Они работают, потому что они, вероятно, соответствуют этому «URL-адресу мусора». Поскольку .? соответствует нулю или одному символу, . соответствует одному символу, а ^ соответствует только началу строки (независимо от того, что следует).

Вопрос скорее в том, как вы различаете «мусорные» и «не мусорные» URL.

...