例如,我希望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变量的问题,并且没有其他任何东西可以匹配。洞察力会很棒!如果我在这里错误的轨道,我道歉。
答案 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'