24

CodeIgniterのURLを整理するためにApacheの書き換えルールを設定しています。

この質問(およびその場所で見つけた多くのフォーラム投稿など)は、次のルール(または非常に類似したもの)の使用を文書化しています。

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

RewriteRuleの後の$1が(。*)からキャプチャされた文字列を参照していることは知っていますが、最初の$ 1(RewriteCondの直後)は何を表していますか?私が見た多くの例では、RewriteCondの最初の引数として%{REQUEST_URI}のようなものを使用しています。

4

2 に答える 2

31

$1基本的に、文字列の最初と最後からすべてのキャプチャされた内容です。つまり、$1 = (.*).

あなたの書き直しでは、^は文字列の開始を意味し、 は(.*)何にでも一致すると言い、$は文字列の終わりを意味します。つまり、基本的には、文字列の最初から最後まですべてを取得し、その値を $1 に割り当てるということです。

したがって、 と入力するwww.example.com/tacos-are-goodと、$1 = "tacos-are-good". したがって、最後の書き換えは実際にはwww.example.com/index.php/tacos-are-good.

参考になるかもしれない ModRewrite のチート シートを次に示し ます。

于 2012-11-13T21:48:11.587 に答える
9

$1 は、それに続く正規表現の最初の括弧のセットからの一致を表します。($2 は、括弧の 2 番目のセットに一致します - 指定されている場合)

たとえば、正規表現は「index.php」または「phpinfo.php」などではないものと一致します。したがって、要求された URL がそれらのいずれでもない場合、書き換え条件が渡され、一致したセクションが渡されますリライタルール。

于 2012-11-13T21:48:00.660 に答える