使用htaccess仅重定向子页面

时间:2013-07-14 18:31:40

标签: .htaccess

我有一个网站(WordPress多站点),我已将一堆内容从路由域(http:// domain [dot] com)移动到子域(http://sub.domain [dot] ] COM)。现在我需要将用户引导到路由站点的所有页面(http:// domain [dot] com / page)到他们的新位置(http://sub.domain [dot] com / page)。但是......这就是我真正挣扎的......我需要省略这次重写的路线网址,因为还有另一个“地理重定向”,我不需要这样做。因此,我需要做的是仅重定向那些子页面而不是父/主域。

这是我正在使用的(最近一次迭代):

# ignore the home page, not working :(
RewriteCond %{HTTP_HOST} !^(.*)\.routetogreatness\.com$ [NC]
# redirect all the sub pages, works
RewriteCond %{HTTP_HOST} ^routetogreatness.com [NC]
RewriteRule ^(.*)$ http://global.routetogreatness.com/$1 [L,R=301]

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

我认为您要搜索的是检查所请求文件是否不是文件名的条件。这就是RewriteCond %{REQUEST_FILENAME} !-f。如果%{REQUEST_FILENAME}(我相信服务器上的文件的绝对路径,基于请求)不是文件,则确实如此。 (请注意:我没有测试过此代码,因为我无法访问此位置的服务器,但我认为它应该可以使用。)

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} ^domain.com [NC]
RewriteRule ^(.*)$ http://sub.domain.com/$1 [L,R=301]

另一种解决方案是,如果请求的网址包含斜杠,则只重写网址。它会重定向domain.com/folder/index.php,但不会重定向domain.com/index.php

RewriteCond %{REQUEST_URI} ^/([^/]+)/(.+)$
RewriteCond %{HTTP_HOST} ^domain.com [NC]
RewriteRule ^(.*)$ http://sub.domain.com/$1 [L,R=301]

答案 1 :(得分:0)

好的,所以上面的解决方案对我来说并不是很有效,因为事实证明,虽然这在子/子页面上运行得很好,但它会跳过父页面和主页(如域名/以新闻为例。我最终还是坚持这个:

RewriteCond %{REQUEST_URI} !^/$
RewriteCond %{HTTP_HOST} ^domain.com [NC]
RewriteRule ^(.*)$ http://sub.domain.com/$1 [L,R=301]

这只是跳过主页或根URL并重定向其他所有内容,甚至是404s。