使用.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重定向以及其他各种尝试都无济于事(
非常感谢任何帮助。
干杯
答案 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.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/.*
匹配。如果/
在外面,则在没有单独规则的情况下,您将无法/_sub
。
最后一次重写与你的第一条规则相同 - 不需要输入L,因为它已经是最后一条处理规则。