为什么我的子域重定向到我的主域?

时间:2013-09-18 00:52:33

标签: apache .htaccess redirect mod-rewrite

基本上,我有一个子域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]

2 个答案:

答案 0 :(得分:3)

假设您的子域和主域都具有相同的文档根(因此使用相同的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]

答案 1 :(得分:1)

这是这条规则:

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域。

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