在构建网站时,我曾经在.htaccess中使用以下规则:
RewriteRule ^test/(.*) cgi-bin/router.py?request=$1 [NC]
每当用户转到mysite.com/test/something
时,他们都会被重定向到cgi-bin/router.py?request=something
。这非常有效。
我现在已经完成了网站,并希望“打开它”。但是,只是从规则中删除test/
位不起作用,尽管它应该符合here和here:
RewriteRule ^(.*) cgi-bin/router.py?request=$1 [NC]
我也试过了^$
但是我放弃了用户在网址中键入的内容。
我的正则表达式错了吗?
答案 0 :(得分:1)
尝试在其前面添加/
,在结尾添加$
像:
RewriteRule ^/(.*)$ cgi-bin/router.py?request=$1 [NC]
另外,我发现在测试时最好使用RewriteBase
指令。然后你可以改变它,而不必乱用正则表达式本身。
RewriteBase /test/
RewriteRule ^(.*)$ cgi-bin/router.py?request=$1 [NC]
并且,当移动到现实世界时:
RewriteBase /
RewriteRule ^(.*)$ cgi-bin/router.py?request=$1 [NC]
修改强>
经过一些测试后,我发现问题可能不在于表达式本身,而在于您的目录名称:cgi-bin/
。默认情况下,Apache将此目录用于CGI脚本,但使用ScriptAlias
将/cgi-bin/*
的请求重定向到另一个目录。在我的例子中,Apache安装目录中的目录名称相同。
这是您自己创建的目录,还是使用Apache将其别名的目录?
你必须
就个人而言,我会选择#3。我试过这个,它对我来说很好。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !bin/
RewriteRule ^(.+) bin/request.php?ctrl=$1 [NC,L]
</IfModule>