1

使用.htaccess我成功地将一组特定的子文件夹(blogdevmedia等)重定向到子域。

像这样:

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 重定向以及其他各种尝试均无济于事:(

任何帮助将不胜感激。

干杯

4

1 回答 1

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]

s 限制前两条规则,RewriteCond使它们只在website.com和上运行www.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/.*。如果在外面,如果没有单独的规则/,您将无法进行 403 。/_sub

最后一次重写与您的第一条规则相同 - 但是,无需放置 L,因为它已经是要处理的最后一条规则。

于 2012-11-28T08:30:31.467 回答