【问题标题】:Why is my subdomain redirecting to my main domain?为什么我的子域重定向到我的主域?
【发布时间】:2013-09-18 00:52:32
【问题描述】:

所以基本上,我有一个子域,m.mydomain.com.au,虽然每次我访问它,我都会被重定向到www.mydomain.com.au/m

例如,如果我尝试转到m.mydomain.com.au/contact.php,我会自动重定向到www.mydomain.com.au/m/contact.php

我以前从未尝试修改我的.htaccess 文件,但我认为它目前是导致问题的原因。

非常感谢所有帮助和建议。

这是我完整的.htaccess 文件:

Options +FollowSymLinks

# Use Mod_deflate to compress static files
<ifmodule mod_deflate.c>
<filesmatch ".(js|css|ico|txt|htm|html|php)$">
SetOutputFilter DEFLATE
</filesmatch>
</ifmodule>

# Speed up caching
FileETag MTime Size

# Expires
ExpiresActive On
ExpiresDefault "access plus 366 days"

# Future Expires Headers
<filesmatch ".(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Expires "Sat, 27 Dec 2014 23:59:59 GMT"
</filesmatch>


RewriteEngine On


RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule .* index.php [F]
RewriteCond %{HTTP_HOST} !^www\.mydomain\.com\.au
RewriteRule ^(.*)$ http://www.mydomain.com.au/$1 [R=permanent,L]

#RewriteBase /


RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

RewriteCond %{REQUEST_URI} !^/index\.php

RewriteCond %{REQUEST_URI} /component/|(/[^.]*|\.(php|html?|feed|pdf|vcf|raw))$ [NC]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule .* index.php [L]

【问题讨论】:

    标签: apache .htaccess redirect mod-rewrite


    【解决方案1】:

    假设您的子域和主域具有相同的文档根目录(因此使用相同的 htaccess 文件),这就是导致重定向的规则:

    RewriteCond %{HTTP_HOST} !^www\.mydomain\.com\.au
    RewriteRule ^(.*)$ http://www.mydomain.com.au/$1 [R=permanent,L]
    

    这实质上是说,如果域不是 www.mydomain.com.au,则将其重定向到http://www.mydomain.com.au/

    您需要添加一个额外的检查,以便它不会重定向您的子域:

    RewriteCond %{HTTP_HOST} !^www\.mydomain\.com\.au$ [NC]
    RewriteCond %{HTTP_HOST} !^m\.mydomain\.com\.au$ [NC]
    RewriteRule ^(.*)$ http://www.mydomain.com.au/$1 [R=permanent,L]
    

    或者只重定向没有www.的域:

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

    【讨论】:

    • 抱歉,我的问题有误。请再次查看示例。重定向到www.mydomain.com.au/m,而不是www.mydomain.com.au
    • @fizzix 您的 htaccess 文件中没有任何内容重定向到 /m/ 文件夹,所以谁知道呢。
    【解决方案2】:

    这是这里的规则:

    RewriteCond %{HTTP_HOST} !^www\.mydomain\.com\.au
    RewriteRule ^(.*)$ http://www.mydomain.com.au/$1 [R=permanent,L]
    

    该规则基本上说如果HTTP_HOST(即HTTP Host: 标头,这是用于访问该站点的域名)不是www.mydomain.com.au,那么它将发送一个HTTP HTTP 301(“永久重定向") 到www 域。

    删除这两行,你会得到你想要的——但你会失去规范的域名重定向。

    【讨论】:

    • 抱歉,我的问题有误。请再次查看示例。重定向到www.mydomain.com.au/m,而不是www.mydomain.com.au
    • 对不起,伙计,似乎没有解决我的问题。查看我对问题所做的修改。
    猜你喜欢
    • 1970-01-01
    • 2018-03-11
    • 2020-05-31
    • 1970-01-01
    • 2011-09-17
    • 2016-06-11
    • 2012-07-22
    • 2016-08-13
    • 2020-11-25
    相关资源
    最近更新 更多