Подтвердить что ты не робот

Что делает аргумент $1 в этой RewriteCond?

Я настраиваю правила перезаписи Apache, чтобы упорядочить URL-адреса CodeIgniter.

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

RewriteEngine on
RewriteCond $1 !^(index\.php|phpinfo\.php|images|robots\.txt|sitemap\.xml\.gz|sitemap\.xml|assets)
RewriteRule ^(.*)$ /index.php/$1 [L]

Я знаю $1 после того, как RewriteRule ссылается на захваченную строку из (. *), но что представляет собой первый $1 (прямо после RewriteCond)? Много примеров, которые я видел используйте что-то наподобие% {REQUEST_URI} в качестве первого аргумента для RewriteCond.

4b9b3361

Ответ 1

$1 - это в основном захваченное содержимое всего с самого начала и конца строки. Другими словами, $1 = (.*).

В вашей перезаписи ^ означает начало строки, (.*) говорит, что соответствует чему-либо, а $ означает конец строки. Итак, в основном, он говорит, хватайте все от начала до конца строки и присваивает этому значению значение $1.

Итак, если я набираю www.example.com/tacos-are-good, то $1 = "tacos-are-good". Таким образом, ваш конец будет действительно www.example.com/index.php/tacos-are-good.

Здесь может быть полезен чит-лист для ModRewrite: http://www.addedbytes.com/cheat-sheets/mod_rewrite-cheat-sheet/

Ответ 2

$1 представляет соответствие из первого набора круглых скобок в регулярном выражении, которое следует за ним. ($ 2 будет соответствовать второму набору круглых скобок - если задано)

Например, регулярное выражение соответствует любому, что НЕ является "index.php" или "phpinfo.php" и т.д. Таким образом, условие перезаписи передается, если запрошенный URL-адрес не является одним из них, а соответствующий раздел затем передается в перезапись.