301将www.root.com/subfolder重定向到同一服务器上的www.subfolder.com

时间:2014-01-24 12:17:42

标签: regex apache .htaccess mod-rewrite redirect

嗨,Stackoverflow的人,

我老老实实地在这里搜索并尝试了一些东西,但由于我真的不是专家而且没有任何工作,我迷失了,需要你的帮助。我不经常在这里发帖,因为通常我找到了我想要的东西。

情况

我在同一台服务器上运行不同的网站。假设我的一个网站叫做Cats。它与CMSMS一起运行并驻留在我的根的子文件夹中,名为cats.com

在我的服务器的根目录中有一个带有此代码的htaccess文件(由服务器管理员生成):

RewriteCond %{HTTP_HOST}    ^www.cats.com$
RewriteCond %{REQUEST_URI}  !^/cats.com/
RewriteRule (.*)            /cats.com/$1
RewriteCond %{HTTP_HOST}    ^cats.com$
RewriteCond %{REQUEST_URI}  !^/cats.com/
RewriteRule (.*)            /cats.com/$1

在cats.com子文件夹中有一个htaccess文件,其中包含重写代码:

# RewriteBase /cats.com
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [QSA]

这很有效。当我请求www.cats.com时,我在根目录中看到了/cats.com子文件夹的内容,但URL基础保持在www.cats.com,所有的URL都非常漂亮。

但是,由于我网站配置文件中的设置错误(我的错误),Google中列出的网址是

http://www.root.com/cats.com

当我点击网址时,我看到了正确的网页,但地址栏显示为http://www.root.com/cats.com。漂亮的URL重写有效,但我希望这个URL重写为www.cats.com

我尝试了什么

我尝试用

重写Google列出的网址

尝试一个

我在htaccess文件中尝试了这一点,低于现有的重写规则。

RewriteRule ^/cats.com(.*)$ http://www.cats.com [R=301,L]
RewriteRule ^/cats.com/(.*)$ http://www.cats.com/$1 [R=301,L]

什么都没发生。一切都保持不变。

尝试两个

再次在htaccess文件中,在现有重写规则之下和之上尝试了这个

Redirect 301 /cats.com http://cats.com

这导致在所有场合都有无限循环。


我希望我的描述足够清楚......

如果有人知道什么可能/应该有用,我很乐意听到它。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

cats.com子文件夹的htaccess文件中的规则更改为:

RewriteEngine On
RewriteBase /cats.com/

RewriteCond %{THE_REQUEST} /+(cats\.com)/(\S+) [NC]
RewriteRule ^ http://%1/%2 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [QSA,L]