如何在htaccess文件中编写条件重定向规则

时间:2014-03-20 13:30:17

标签: php wordpress .htaccess mod-rewrite redirect

我有一个WordPress博客,它在子域名URL下注册(类似http://news.main.co.uk)。该博客的客户决定采用以下网址; www.main.co.uk/news。

域名所有者设置了重定向,因此www.main.co.uk/news会加载http://news.main.co.uk上托管的博客。

我们现在遇到的问题是流量来自两个不同的网址。我想重定向通过旧网址(http://news.main.co.uk)到达的用户,将其重定向到较新的网址http://www.main.co.uk,以便流量来自一个网址。

我正在尝试将规则写入现有的htaccess文件,以便只有来自较新网址http://www.main.co.uk/news的IP地址加载博客。如何编写规则来引导用户从http://news.main.co.ukhttp://www.main.co.uk/news,请记住http://www.main.co.uk/news正在使用旧网址加载博客?

感谢任何帮助!

以下是.htaccess文件的现有内容:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

以下是我尝试实施上述规则(导致500错误):

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{REMOTE_ADDR} != xx.xxx.xx.xxx
RewriteCond %{REMOTE_ADDR} != xx.xx.xxx.xxx
RewriteRule .*http://www.main.co.uk/news/$ [R=301,L]

RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

1 个答案:

答案 0 :(得分:2)

你可以像这样进行IP重定向:

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

但是......听起来你在这里创造了两个问题:1)重定向循环,以及2)尝试重写主机上不存在的域名。

如果我正确读到这个,你想要:

http://news.main.co.uk在其他主机上重写为http://www.main.co.uk/news

同时保持当前的重定向:

http://www.main.co.uk/news ----&gt; http://news.main.co.uk

您无法将其他主机上的news.子域重写为“显示”为www.,因为www本身就是子域,并且可能已经分配给您的主要主机。你可以取消分配它,但你会为自己制造一个大混乱。

如果你对/news子目录重定向和解析为news.很好,那么你就是金色的(但这听起来并不像你想要的那样)。您能够实现所需目标的唯一方法是将博客移动到同一主机并进入子目录。

另一方面,您的客户的决定 可能 归因于SEO问题。子域本质上就像一个不同的网站,而一个子目录在同一个父域下运行,因此被认为是与父母相同的网站的“一部分”。因此,搜索引擎会收集子目录中的所有信息并将其编入索引,从而为同一整个父网站做出贡献。

子域名(例如mobile.)通常会被构建,因此会被视为单独的网站,尽管Google会不断改变对这些内容的看法。

只是一个FYI ......