仅在子文件夹中重定向特定子目录

时间:2012-11-28 07:05:36

标签: .htaccess redirect

使用.htaccess我成功将一组特定的子文件夹(博客 dev 媒体等)重定向到子域名

像这样:

  

www.website.com/_subs/dev/foo被定向到dev.website.com/foo

这是通过以下代码片段实现的:

RewriteEngine on
RewriteBase /

RewriteCond %{HTTP_HOST} ^website.com$
RewriteRule ^(.*)$ http://www.website.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} website.com
RewriteCond %{REQUEST_URI} ^/_subs/blog/(.*)$
RewriteRule .* http://blog.website.com/%1 [R=301,L]

RewriteCond %{HTTP_HOST} website.com
RewriteCond %{REQUEST_URI} ^/_subs/dev/(.*)$
RewriteRule .* http://dev.website.com/%1 [R=301,L]

RewriteCond %{HTTP_HOST} website.com
RewriteCond %{REQUEST_URI} ^/_subs/media/(.*)$
RewriteRule .* http://media.website.com/%1 [R=301,L]

问题是:

  

如果未向我的某个特定子文件夹发出请求,如何阻止访问/_subs文件夹?

我希望将www.website.com/_subs/foo的任何请求简单地重定向到www.website.com

我尝试过使用301重定向以及其他各种尝试都无济于事(

非常感谢任何帮助。

干杯

1 个答案:

答案 0 :(得分:2)

你的规则比他们需要的要复杂得多,我认为这使解决方案更难以看到。

以下是我提出的建议:

RewriteEngine on
RewriteBase /

RewriteCond %{HTTP_HOST} ^(www.)?website.com$
RewriteRule ^_sub/(blog|dev|media)/?(.*)$ http://$1.website.com/$2 [R=301,L]

RewriteCond %{HTTP_HOST} ^(www.)?website.com$
RewriteRule ^_sub(/.*)$ - [F]

RewriteCond %{HTTP_HOST} ^website.com$
RewriteRule ^(.*)$ http://www.website.com/$1 [R=301]

RewriteCond限制前两个规则,以便它们仅在website.comwww.website.com上运行。可能您将来可能会有一个类似http://blog.website.com/_sub/this-rocks的网址,您不想重定向。

在第一次重写中包含这两个域意味着您将减少一次301重定向,这应该会使请求http://website.com/_sub/blog更快地直接重定向到http://blog.website.com。 L确保符合此规则的任何内容都不会被标记为禁止。

对于以/_sub开头并且与第一个规则不匹配的任何内容,第二次重写返回403。 /位于群组内,因此会与/_sub/_sub//_sub/.*匹配。如果/在外面,则在没有单独规则的情况下,您将无法/_sub

最后一次重写与你的第一条规则相同 - 不需要输入L,因为它已经是最后一条处理规则。