将http://example.com重定向到http:/www.example.com,同时保持http://subdomain.example.com访问不变

时间:2012-11-08 00:48:43

标签: apache mod-rewrite url-rewriting httpd.conf

我有一个网站,我已经启用了子域名访问,例如:

 http://subdomain1.example.com

访问相同的代码,但传递域参数以显示不同的微型网站。 httpd.conf代码如下所示:

 RewriteCond %{HTTP_HOST} ^([^./]+)\.example\.com$
 RewriteRule forums.html$ /browse.php?type=forums&domain=%1 [QSA]

现在我需要将http://example.com重定向到http://www.example.com

我尝试了这个,但它不起作用:

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

(来源:http://www.cyberciti.biz/faq/apache-redirect-domaincom-to-wwwdomaincom/

EDIT1

<VirtualHost IPADDRESS:80>
    ServerAlias *.example.com
    DocumentRoot /var/www/html/abc
    ServerName www.example.com
    UseCanonicalName On

EDIT2

嗨mreithub,

我需要的设置是这样的:

http://X1.example.com应该使用/ something / X1

中的代码

http://X2.example.com应该使用/ something / X2

中的代码

http://example.com应重定向到http://www.example.com

http://www.example.com/scriptA.php应该使用/var/www/html/abc/scriptA.php中的代码

http://whateverelse.example.com/scriptA.php应使用/var/www/html/abc/scriptA.php中的代码,但应使用'domain = whateverelse'参数传递(但屏幕上的网址应始终显示域名为http://whateverelse.example.com

我问了一个关于SF的问题 - https://serverfault.com/questions/408805/configuring-httpd-conf-to-handle-wildcard-domains-with-multiple-scripts - 我使用adaptr的技术将域参数传递给PHP脚本。

2 个答案:

答案 0 :(得分:0)

我个人最喜欢在apache中重定向整个VirtualHosts,只需为域重新定向创建一个VirtualHost并使用Redirect指令:

<VirtualHost IPADDRESS:80>
  ServerName example.com
  Redirect / http://www.example.com/
  DocumentRoot /var/www # <-- Just for completeness
</VirtualHost>

...然后是您实际网站的另一个VirtualHost

Redirect重定向每个要托管a到b的请求,同时保留任何后缀(例如http://example.com/foo?bar=bak变为http://www.example.com/foo?bar=bak)。

我经常使用Redirect从http://重写为https://

答案 1 :(得分:0)

哇。 3个小时后......很多变化,很多学习。

1)改变了这个:

   NameVirtualHost IPADDRESS:80

要:

   NameVirtualHost *:80

2)标记全部:

   <VirtualHost IPADDRESS:80>

如:

   <VirtualHost *:80>

3)重新安排ServerName并将其放在VirtualHost中(不确定这是否有所不同)

<VirtualHost *:80>
    ServerName test4.example.com
    ServerAlias test4.example.com
    DocumentRoot /home/test4/public_html
    UseCanonicalName On
</VirtualHost>

3)重新安排所有VirtualHosts。早先放置“静态”/固定子域,将最后一个放置为全局/ www。最后一个看起来像:

<VirtualHost *:80>
    ServerName www.example.com
    ServerAlias example.com *.example.com
    DocumentRoot /var/www/html/abc
    UseCanonicalName On
    ...