过去几个小时我一直在学习.htaccess重写。我无法做对。我在SO上读过很多帖子,但无法解决我的问题。这是我的情况:
www.example.com
重定向到
example.example2.com
现在我想在网址中显示原始域名。我有这个:
RewriteCond %{HTTP_HOST} ^example\.example2\.com/$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
这不起作用。我仍然看到example.example2.com而不是www.example.com
.htaccess文件位于子域文件夹的顶层。
我应该再次注意到这对我来说是新的,这是我从互联网上找到的例子中得出的结论。有人能说出如何做到这一点吗?
非常感谢
修改
我正在尝试安装Drupal多站点配置。我的问题似乎可以通过here和here解释的.htaccess说明来解决。因此我在这里发布了它,而不是在SO的Drupal部分。 Drupal多站点配置的想法是将所有流量定向到分期付款,然后根据请求进行区分。
我无法直接控制从www.example.com到example.example2.com的重定向。我的托管公司提供直接重定向或通过框架。我可以检查表格中的任何一个。我不知道他们做了什么。通过直接重定向,网址会从www.example.com
更改为example.example2.com
。 (现在Drupal安装)如果我选择 frame ,URL保持不变(当然),但将鼠标悬停在链接上仍会显示example.example2.com身份。
我没有从多站点配置开始。我会按照多站点的说明将example.exampl2.com
移动到www.example2.com/sites/www.example.com
。同时该网站位于example.example2.com
。但这意味着我需要维护两个分期付款,这不是首选。所以我开始试图让example.example2.com
看起来像www.example.com
。然后至少访客永远不会注意到差异。
我现在有了这个
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]
RewriteCond %{HTTP_HOST} ^example\.example2\.nl$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R]
它导致循环。
答案 0 :(得分:0)
首先您的要求已被撤销。您可能希望将example.example2.com
重定向到www.example.com
。
第二件事只有mod_proxy支持才能实现您的目标。在httpd.conf
中启用mod_proxy,然后通过httpd.conf
启用mod_rewrite和.htaccess,然后将此代码放在.htaccess
目录下的DOCUMENT_ROOT
中:
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^example\.example2\.com$ [NC]
RewriteRule ^ http://www.example.com%{REQUEST_URI} [L,P]
请注意,此处的标志P
用于mod_rewrite中的代理支持。
答案 1 :(得分:0)
你的.htaccess几乎是完美的。只有一个问题,HTTP_HOST
只是主机,没有一个尾部斜杠/
。 RewriteCond
应为
RewriteCond %{HTTP_HOST} ^example\.example2\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R]
现在,有一个循环重写从www.example.com
到example.example2.com
再返回。要打破这种无限循环,必须添加终止条件,这将停止规则。使用
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]
如果一切正常,您可以将R
更改为R=301
。
301
的情况下从不测试,请参阅此答案 Tips for debugging .htaccess rewrite rules 详情。