htaccess重定向规则与彼此冲突

时间:2017-06-21 18:32:47

标签: apache .htaccess redirect mod-rewrite

我需要编写我的htaccess来执行以下操作。

1)我想将example.com/blog/whatever重定向到blog.example.com/whatever(NO HTTPS)

2)example.com - > https://www.example.com(HTTPS并添加WWW)

以下是我的htaccess。博客部分在取消注释时工作正常,但是当我取消注释与博客相关的那两行时,www.mydomain.com不再起作用,我在浏览器中什么也得不到,甚至404都没有。如果我评论这两行(就像现在一样)然后一切正常但不是博客部分。

有人可以帮我解决这个问题,这样我就可以让两条规则同时运作。

RewriteEngine on

RewriteCond %{SERVER_PORT} 80

#blog config 

#RewriteRule ^blog$ http://blog.example.com/ [P,L,R=301]

#RewriteRule ^blog/(.*)$ http://blog.example.com/$1 [P,L,R=301]


# forward all the request to https and www

RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]


# Framework purposes

RewriteCond $1 !^(index\.php|assets)

RewriteRule ^(.*)$ index.php?/$1 [L]

所以基本上问题是当我将这两个规则放在一起时(博客部分和强制https)它们不能一起工作,但是如果我取消注释另一个规则,每个规则都会单独工作。

1 个答案:

答案 0 :(得分:1)

这应该为你做。

RewriteEngine on

# Redirect blog
RewriteRule ^blog/(.*)$ http://blog.example.com/$1 [NE,R=301,L]

# Redirect all HTTPS or non-www requests to HTTPS and www
RewriteCond %{SERVER_PORT} 80 [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.example.com/$1 [NE,R=301,L]

# Framework purposes
RewriteCond $1 !^(index\.php|assets)
RewriteRule ^(.*)$ index.php?/$1 [L]