将非“www”重定向到“www”并重写除www以外的所有子域

时间:2014-02-14 12:50:49

标签: apache .htaccess mod-rewrite redirect

我想在我的网站上将所有domain.com重定向到www.domain.com

所有不是www.domain.com的子域名,例如xyz.domain.com/abc重写(不是重定向,因为它仍然会在浏览器上显示xyz.domain.com/abc)到www.domain.com/ page.php文件ID = XYZ&安培;?PARAM = ABC

目前我有这个:

RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301]
RewriteCond %{HTTP_HOST} !^(www\.)?[^.]+\.domain\.com.*$
RewriteRule (.*) http://www.domain.com/hosted_form.php?id=$1 [L]

成功将domain.com重定向到www.domain.com,但显示找不到mno.domain.com/efg的服务器。

2 个答案:

答案 0 :(得分:1)

RewriteCond %{HTTP_HOST} ^([a-z.]+)?domain.com$ [NC]  
RewriteCond %{HTTP_HOST} !^www. [NC]  
RewriteRule .? http://www.%domain.com%{REQUEST_URI} [R=301,L]

答案 1 :(得分:0)

除了使用非www网址解决您的问题的萨达姆阿布哥达解决方案之外,您还必须启用通配符子域以避免任何子域出现“服务器未找到”问题。

如果您使用的是Apache,请修改您的httpd.conf配置文件以包含通配符行,如下所示:

NameVirtualHost ?.?.?.?

<VirtualHost ?.?.?.?>
    DocumentRoot /www/subdomain
    ServerName www.domain.tld
    ServerAlias *.domain.tld
</VirtualHost>