【问题标题】:Redirecting http://example.com to http:/www.example.com while keeping http://subdomain.example.com access intact将 http://example.com 重定向到 http://www.example.com,同时保持 http://subdomain.example.com 访问不变
【发布时间】:2012-10-28 03:55:44
【问题描述】:

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

 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/

编辑1

<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' 参数传递(但屏幕上的 URL 应始终显示域为 @987654330 @)

我曾在 SF -https://serverfault.com/questions/408805/configuring-httpd-conf-to-handle-wildcard-domains-with-multiple-scripts 上问过一个问题 - 我使用适配器的技术将域参数传递给 PHP 脚本。

【问题讨论】:

  • 你使用的是apache配置文件还是.htaccess?
  • apache配置文件(httpd.conf)

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


【解决方案1】:

我个人最喜欢在 apache 中重定向整个 VirtualHosts 是简单地为域创建一个 VirtualHost 来重定向并使用 Redirect 指令:

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

...然后为您的实际网站创建另一个虚拟主机

Redirect 将每个去往主机 a 的请求重定向到 b,同时保留所有后缀(例如,http://example.com/foo?bar=bak 变为 http://www.example.com/foo?bar=bak)。

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

【讨论】:

  • @Steve 我编辑了答案以提供更完整的示例。希望对你有帮助
  • 嗨 M - 请参阅我的 Edit1 - 它描述了我目前拥有的内容。这允许访问“站点”,例如“xyz.example.com”(我需要拥有)。
  • @Steve 只需像我发布的那样添加另一个虚拟主机。您可能需要将它们按正确的顺序排列,但它应该可以工作。如果没有,请确保在 apache 的配置中某处有 NameVirtualHost IPADDRESS:80
  • 感谢 mreithub - 你能看看我的 Edit2 - 这完全解释了我需要做的所有事情。 (a) 我有子域,我不希望 subdomain.example.com 设置的“一部分”和 (b) 我需要通过域参数使用现有脚本处理对 subdomain.example.com 的访问。
【解决方案2】:

哇。 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) 重新排列所有虚拟主机。将“静态”/固定子域放在前面,将包罗万象的/www 放在最后一个。最后一个看起来像:

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

【讨论】:

    猜你喜欢
    • 2017-12-21
    • 2016-01-16
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 2020-12-21
    • 1970-01-01
    相关资源
    最近更新 更多