我在同一个域上有两个单独的WordPress站点,其中一个以下列方式安装:
http://subdomain1.domain.tld and http://subdomain2.domain.tld.
http://domain.tld redirects to subdomain1.
我需要删除所有www。对于非www(这现在可以在http://htaccess.madewithlove.be/上进行测试),www.domain.com现在返回domain.com但是当我输入前面带有www的子域时,我仍然会返回404页面。
我现在的代码,以及@icabod的建议现在看起来像这样。
# 301 redirect www to non-www url
# including subdomains
<IfModule mod_rewrite.c>
Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)
RewriteRule (.*) http://%1/$1 [R]
</IfModule>
mod_rewrite
正在使用其他重定向,我不想使用PHP重定向。我无法访问我的注册商的CNames,所以我无法将它们重定向到那里。我已经放置了一个.htaccess
文件,其中我在根文件夹中包含以下代码,并尝试将其放在子域根文件夹中。
这让我开始香蕉!
谢谢。
答案 0 :(得分:0)
不要忘记您可以在规则中使用RewriteCond
表达式的一部分,就像您可以匹配RewriteRule
表达式的一部分一样:
RewriteCond %{HTTP_HOST} ^www\.(.*)
RewriteRule (.*) http://%1/$1 [R]
%1
与RewriteCond
中大括号中的部分匹配,$1
与RewriteRule
中的部分匹配。这种重写确实假设您只在标准端口80上使用http,但基本上会从请求的URI的开头删除任何www.
。从那时起,将domain.tld
重定向到subdomain1.domain.tld
应该很简单:
RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule (.*) http://subdomain1.example.com/$1 [R]
顺便说一下,在重写工作正常之前,你可能不应该使用[R=301]
,因为301
意味着它是永久性重写,但在测试期间它很容易发生变化。 / p>