为什么这个mod_rewrite指令不起作用?

时间:2013-09-06 18:31:07

标签: regex apache .htaccess mod-rewrite

由于服务器迁移,我尝试将所有URI从/rc/roundcube/sm/squirrelmail开始直接导向https://webmail.{HTTP_HOST}以下mod_rewrite代码:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$
RewriteCond %{REQUEST_URI} ^/(rc|roundcube|sm|squirrelmail)(\/)?(.*)?$
RewriteRule ^/(.*) https://webmail.%1 [R=302, L]

因为我希望这个重定向能够影响机器上的所有虚拟主机,所以我将它放在Apache的httpd.conf文件中的虚拟主机指令中。

服务器确实启用了mod_rewrite,但上面的内容似乎什么也没做!

也许有人可以发现我的错误?

预期结果的一个例子是:

http://www.mydomain.com/rc - > https://webmail.mydomain.com

应该能够使用或不使用www或尾随/来处理任务,并且可以在用户为原始网址添加书签时包含参数。

1 个答案:

答案 0 :(得分:1)

我认为如果您只是将其放在 httpd.conf 文件中,则该规则没有上下文。尝试将其包装在一个位置或目录中(位置可能更好):

<Location "/">
  RewriteEngine on
  RewriteCond %{REQUEST_URI} ^/(rc|roundcube|sm|squirrelmail)(/)?(.*)?$
  RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$
  RewriteRule ^/(.*) https://webmail.%2 [R=302,L]
</Location>

并摆脱R=302,

之后的空格