.htaccess多次重写条件和规则

时间:2013-12-24 05:51:30

标签: regex .htaccess mod-rewrite

我正在尝试在一个.htaccess文件中解决多个重写规则和条件。

该文件如下所示:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^(jira.)?mydomain.com$
RewriteRule (.*) http://jira.mydomain.com:8080/jira/$1 [R=301,L]


RewriteCond %{HTTP_HOST} ^(confluence.)?mydomain.com$
RewriteRule (.*) confluence.mydomain.com:8099$1 [R=301,L]


RewriteCond %{HTTP_HOST} ^(stash.)?mydomain.com$
RewriteRule (.*) stash.mydomain.com:7990/stash$1 [R=301,L]

所以进入域名jira.mydomain.com将我转发给jira.mydomain.com:8080/jira/ 第一次重写很好,其他两次没有。

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

这是由于错误的正则表达式(jira.)?(stash.)?等导致jira.可选,因此您的第一个规则始终匹配。

试试这段代码:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^jira\.mydomain\.com$ [NC]
RewriteRule (.*) http://jira.mydomain.com:8080/jira/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^confluence\.mydomain\.com$ [NC]
RewriteRule (.*) http://confluence.mydomain.com:8099/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^stash\.mydomain\.com$ [NC]
RewriteRule (.*) http://stash.mydomain.com:7990/stash/$1 [R=301,L]