从htaccess重定向中排除子域名

时间:2014-08-30 11:40:22

标签: .htaccess mod-rewrite redirect ssl wildcard

我在提交此帖子之前搜索了stackoverflow,但我没有运气:-S

我的网站上有一个复杂的.htaccess文件,如下所示:

这部分用于重定向(X.2nate dot com - > 2nate dot com / api / x),它运行良好

########### API Redirection Section ##########

RewriteEngine On
 # Extract the subdomain part of domain.com
RewriteCond %{HTTP_HOST} ^([^\.]+)\.2nate\.com$ [NC]
 # Check that the subdomain part is not www and ftp and mail
RewriteCond %1 !^(www|ftp|mail|charge)$ [NC]
 # Redirect all requests to the original url  /blog
RewriteRule ^.*$ https://2nate.com/api/%1 [L]

此部分用于将非SSL请求重定向到SSL协议:

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

这部分用于将WWW重定向到无WWW地址:

RewriteCond %{HTTP_HOST} ^www\.2nate\.com$
RewriteRule ^/?$ "http\:\/\/2nate\.com\/" [R=301,L]

问题是:

当我试图访问“充电”时,点mywebsite dot com(充电是我主机中真正的子域)我无法访问相关页面并且它正在重定向到主页面!

我认为问题在于这一部分:

RewriteCond %{HTTP_HOST} ^www\.2nate\.com$
RewriteRule ^/?$ "http\:\/\/2nate\.com\/" [R=301,L]

因为当我删除这部分时,一切正常(除了重定向到非WWW)。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

问题实际上是这条规则:

RewriteRule ^.*$ https://2nate.com/api/%1 [L]

由于您在目标网址中使用http://,因此不会进行无提示重写,但会成为外部重定向。

让你的.htaccess像这样:

RewriteEngine On

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

RewriteCond %{HTTP_HOST} ^www\.2nate\.com$
RewriteRule ^ http://2nate.com%{REQUEST_URI} [R=301,L,NE]

# Extract the subdomain part of domain.com
RewriteCond %{HTTP_HOST} ^((?!www)[^.]+)\.2nate\.com$ [NC]
# Check that the subdomain part is not www and ftp and mail
RewriteCond %1 !^(www|ftp|mail|charge)$ [NC]
 # Redirect all requests to the original url /blog
RewriteRule ^.*$ /api/%1 [L]