操作之间有什么区别。和^和^(。*)$?

时间:2015-10-24 15:26:29

标签: regex apache .htaccess mod-rewrite url-rewriting

操作之间的区别是什么:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L]

我知道"。"指任何角色和" ^"字符串的开头。

感谢您的回复!

1 个答案:

答案 0 :(得分:1)

首先让我们了解目标网页的匹配方式。

对于着陆页,URI模式在.htaccess中为^$,在Apache配置中为^/$。因此,您可以安全地使用^/?$

  1. 您的第一个重写规则将匹配每个网址(包括着陆页,即http://domain.com/
  2. 您的第二个重写规则将匹配每个网址(目标网页除外)。由于单个DOT与^$ URI模式不匹配。
  3. 您的第三个重写规则也会匹配每个网址(包括着陆页,即http://domain.com,但有一个不必要的捕获组和仅^的长版本。