301将旧站点重定向到新维护一些文件夹结构,但不是全部

时间:2013-09-03 15:01:11

标签: .htaccess redirect mod-rewrite

所以我正在将我的网站从子域“移动”到根域上的子文件夹,并且在此过程中必须根据原因更改某些子目录结构。这使得重定向对于像我一样具有htaccess知识的人来说有点困难。

对于架构中更深层次的东西(它本质上是一个目录网站),一些结构将是相同的,但有些事情需要移动。以下是我迄今为止创建的内容:

Options +FollowSymlinks 
RewriteEngine On
RewriteCond %{HTTP_HOST} ^subdomain\.example\.com/for-sale$
RewriteRule ^(.*)$ http://www.example.com/property-for-sale/search$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^subdomain\.example\.com/for-sale-details$
RewriteRule ^(.*)$ http://www.example.com/property-for-sale/details$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^subdomain\.example\.com/buyer-registration
RewriteRule ^(.*)$ http://www.example.com/property-for-sale/buyer-registration [R=301,L]

RewriteCond %{HTTP_HOST} ^subdomain\.example\.com/advertise-with-us
RewriteRule ^(.*)$ http://www.example.com/property-for-sale/advertise-with-us [R=301,L]

RewriteCond %{HTTP_HOST} ^subdomain\.example\.com/favourites
RewriteRule ^(.*)$ http://www.example.com/property-for-sale/favourites [R=301,L]

RewriteCond %{HTTP_HOST} ^subdomain\.example\.com/saved-searches
RewriteRule ^(.*)$ http://www.example.com/property-for-sale/saved-searches [R=301,L]

RewriteCond %{HTTP_HOST} ^subdomain\.example\.com/system$
RewriteRule ^(.*)$ http://www.example.com/property-for-sale/system$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^subdomain\.example\.com
RewriteRule ^(.*)$ http://www.example.com/property-for-sale/ [R=301,L]

我想要发生的一个例子是

http://subdomain.example.com/for-sale-details/35141_xml_bvi0009154/gensac-gironde 

重定向到

http://www.example.com/property-for-sale/details/35141_xml_bvi0009154/gensac-gironde 

等等。

基本上,代码末尾没有$的上述重定向是独立页面,之后没有其他子目录。任何带有$的结尾意味着还有更多的目录层,但之后的任何内容都应保留在新URL的末尾。

非常感谢任何帮助!是的,当涉及到这种事情时,我是一个完整的菜鸟,所以请保持友好:)

1 个答案:

答案 0 :(得分:0)

%{HTTP_HOST} var是请求中的“主机”标头,包含主机名,没有/for-sale之类的路径信息。因此,您只能与之匹配,并且您的所有规则都不起作用,因为您尝试匹配URI路径。

相反,所有规则都需要如下所示:

RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$ [NC]
RewriteRule ^for-sale/(.*)$ /property-for-sale/search/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$ [NC]
RewriteRule ^for-sale-details/(.*)$ /property-for-sale/details/$1 [R=301,L]