这个重写规则到底是做什么的?

时间:2013-02-04 02:58:26

标签: regex mod-rewrite url-rewriting

我没有很好地阅读正则表达式。有人可以帮我理解这究竟是做什么的吗?

RewriteRule ^[!/.]*([\/A-Za-z0-9]+)$ index.php

我有一个基本的想法,只是没有具体的清晰度,我不想错过重要的事情。

1 个答案:

答案 0 :(得分:2)

此正则表达式将匹配

的网址
  • 以!,/或开头。和
  • 之后是正斜杠,大写字母或数字。

所有符合此规则的网址请求都将发送到index.php。

这是一个非常不寻常的RewriteRule,因为它启用了以下网址:

http://example.com/!asdf 
http://example.com/!.asdf2
http://example.com/!./asdf5
http://example.com/./asdf5
http://example.com/.asdf5

此类重写规则通常用于将对不存在的文件/目录的请求定向到前端控制器。这样的事情可能会让你更好:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ index.php