通过多域托管防止直接访问主域上的网站
Posted
技术标签:
【中文标题】通过多域托管防止直接访问主域上的网站【英文标题】:Prevent direct access to website on primary domain with multi-domain hosting 【发布时间】:2012-09-12 04:22:06 【问题描述】:我最近购买了多域托管,并在我的计划中托管了多个域。其他域托管在我的主域中的子文件夹上。所以当我转到www.secondarydomain.com
时,它会显示位于www.primarydomain.com/secondarydomain
的网站。
现在我想做的是在有人尝试访问 www.primarydomain.com/secondarydomain
时阻止直接访问,同时保持 www.secondarydomain.com 处于活动状态。
我该怎么做?
【问题讨论】:
【参考方案1】:通过httpd.conf
启用mod_rewrite和.htaccess,然后把这段代码放到你.htaccess
的DOCUMENT_ROOT
目录下:
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteCond %REQUEST_FILENAME -d
RewriteCond %HTTP_HOST ^www\.primarydomain\.com$ [NC]
RewriteCond %THE_REQUEST ^[A-Z]3,\s/+([^\s\?]+)
RewriteRule ^ http://www.%1.com [R=302,L]
一旦你确定它工作正常,将 302 更改为 301。
PS:请记住,它会将带有物理目录 foo
的每个 URL(例如 http://www.primarydomain.com/foo
)重定向到 http://www.foo.com
。
编辑 - 为避免匹配某些已知文件夹,请使用负前瞻,如下所示:
RewriteCond %REQUEST_FILENAME -d
RewriteCond %HTTP_HOST ^www\.primarydomain\.com$ [NC]
RewriteCond %THE_REQUEST ^[A-Z]3,\s/+([^\s\?]+)
RewriteRule ^(?!(foo|bar|baz)/).*$ http://www.%1.com [R=302,L]
【讨论】:
+1 感谢您的工作示例。如何修改它以排除某些文件夹? 抱歉回复晚了。请立即检查我的编辑部分。 我实际上遇到了这个问题 - 几天后 htaccess 文件确实开始与其他托管域发生冲突,大多数都停止工作!所以我不得不删除 htaccess 文件。我与我的托管公司交谈,他们告诉我,如果我在子文件夹中没有 htaccess 文件,这将暗示父文件夹中 htaccess 文件的条件。 有一些方法可以避免在子文件夹中执行此 .htaccess,但我建议您首先在您的问题中发布您当前的 .htaccess,并提供更多关于实际停止工作的详细信息。 对不起,我犯了一个错误,你的代码很好,我只是无法让它按我想要的方式工作,所以我使用了 HTACCESS 生成器并进行了一些冲突的重定向,这弄乱了一切。一些域没有解析,一个正在从 www.thedomain.com 重定向到 www.thedomain.com/subfolder-name (其中 subfolder-name 是托管文件夹,即root/subfolder/wwwroot
【参考方案2】:
我知道在 IIS 中,您可以设置规则,以便如果有人从 www.primarydomain.com/secondarydomain 进入,您可以将他们重定向到 www.secondarydomain.com。这是您要查找的基本模式匹配,如果它解析为“true”,它将按照您的指示重定向。
如果您根本不希望 www.primarydomain.com/secondarydomain 工作,您可以做同样的事情,除了重定向到错误页面。我确信 apache 和其他服务器具有类似的功能,但我只在 IIS 中处理过它。它被称为 URL 重写和重定向。
希望这会有所帮助。
【讨论】:
这不会造成无限循环吗?访问 secondarydomain.com 名称会重定向到我的主机(primarydomain/子文件夹),而主域会重定向到 secondarydomain.com 不,我不是这个意思。您只能从 primarydomain/子文件夹重定向到您的 secondarydomain.com。你不会以相反的方式重定向。 哦不,我只是认为当域名解析并连接到我的服务器时,mod_rewrite 会发生 - 但事实并非如此,因为 htaccess 在根文件夹中而不是在子文件夹中以上是关于通过多域托管防止直接访问主域上的网站的主要内容,如果未能解决你的问题,请参考以下文章
如果我使用 www,我可以从子域访问 iframe 的内容吗?在主域上?
错误 Bad Request (400),当我访问域上的站点时