htaccess - 基数之后的通配符字符串的重写规则是什么?

时间:2011-06-08 19:15:32

标签: php .htaccess mod-rewrite

例如,我希望www.example.com/mr.chase重定向到www.exapmle.com/index.php?name=mr.chase

目前,我使用符号(句点),以便在检查规则之前首先匹配符号。

Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule ^\.([^/]+)/?$   index.php?name=$1 [NC]

以上作品。但是,如果我删除了\.,那么它将会起作用(成功重定向),但我会收到我不期望的值。

我使用PHP,发现$ _GET ['name']产生index.php而不是mr.chase

当基数是通配符时,我只有抓住我的GET变量的问题,并且没有其他任何东西可以匹配。洞察力会很棒!如果我在这里错误的轨道,我道歉。

2 个答案:

答案 0 :(得分:2)

我不明白你的例子,也不理解\.和不匹配的讨论是什么。但是为了防止index.php显示为参数,一个简单的断言应该这样做:

 RewriteRule ^(?!index.php)([\w.]+)/?$   index.php?name=$1  [L]
 #                 ^         ^
 #                 |         |
 #               exclude     |
 #                          only letters and dots

如果这不起作用,那么您的设置就会出现问题(FastCGI有时会产生额外的重写)。或者另一个RewriteRule匹配(=清除除上例之外的所有内容,以及上层目录中的.htaccess文件)。有关详细信息,请查看$_SERVER["QUERY_STRING"]和其他变量进行进一步调试。

如果您无法通过这些提示找到原因,请设置RewriteLog

答案 1 :(得分:0)

这是因为你的^匹配字符串的开头。它正在寻找一个时期作为第一个角色。删除^

此外,更好的模式可能是这样的:

/(.*?\.?([^/]+))/?$

这将匹配'mr.chase'而不仅仅是'.chase'