Php 使用多域托管阻止直接访问主域上的网站

Php 使用多域托管阻止直接访问主域上的网站,php,.htaccess,hosting,Php,.htaccess,Hosting,我最近购买了多域托管,并在我的计划中托管了多个域。其他域托管在我的主域中的子文件夹上。因此,当我进入www.secondarydomain.com时,它将显示位于www.primarydomain.com/secondarydomain的网站 现在我要做的是,当有人试图访问www.primarydomain.com/secondarydomain时,阻止直接访问,同时保持www.secondarydomain.com的活动状态 我该怎么做?我知道在IIS中,您可以设置规则,以便如果有人进入www

我最近购买了多域托管,并在我的计划中托管了多个域。其他域托管在我的主域中的子文件夹上。因此,当我进入
www.secondarydomain.com
时,它将显示位于
www.primarydomain.com/secondarydomain
的网站

现在我要做的是,当有人试图访问www.primarydomain.com/secondarydomain时,阻止直接访问,同时保持www.secondarydomain.com的活动状态


我该怎么做?

我知道在IIS中,您可以设置规则,以便如果有人进入www.primarydomain.com/secondarydomain,您可以将他们重定向到www.secondarydomain.com。它是您要查找的基本模式匹配,如果它解析为“true”,它将根据您的指示重定向

如果你根本不想让www.primarydomain.com/secondarydomain工作,你可以做同样的事情,只是重定向到一个错误页面。我确信apache和其他服务器具有类似的功能,但我只在IIS中处理过它。这叫做URL重写和重定向


希望这有帮助。

通过
httpd.conf
启用mod_rewrite和.htaccess,然后将此代码放在
文档根目录下的
.htaccess
中:

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:请记住,它将重定向每个URL,如
http://www.primarydomain.com/foo
带有物理目录
foo
to
http://www.foo.com

编辑-为避免与某些已知文件夹匹配,请使用负前瞻,如下所示:
这难道不会产生一个无休止的循环吗?访问secondarydomain.com名称会重定向到我的主机(primarydomain/子文件夹),而主域会重定向到secondarydomain.com。我不是这个意思。您只能从primarydomain/子文件夹重定向到secondarydomain.com。你不会以相反的方式重定向。哦,不,我只是认为当域名解析并连接到我的服务器时,会发生mod_重写-但事实并非如此,因为htaccess位于根文件夹中,而不是子文件夹+1中。感谢您提供的工作示例。我如何修改此选项以排除某些文件夹?很抱歉回复太晚。现在请检查我的编辑部分。实际上我有一个问题-htaccess文件确实在几天后开始与其他托管域发生冲突,大多数停止工作!所以我不得不删除htaccess文件。我和我的托管公司谈过,他们告诉我,如果我的子文件夹中没有htaccess文件,这将意味着父文件夹中的htaccess文件的条件。有一些方法可以避免在子文件夹中执行此.htaccess,但我建议您先在问题中发布当前的.htaccess,并提供更多有关的详细信息什么实际停止了工作。很抱歉我犯了一个错误,你的代码很好,我只是无法让它按照我想要的方式工作,所以我使用了一个HTACCESS生成器,并进行了一些相互冲突的重定向,这一切都搞砸了。某些域未解析,一个域正在工作,正在从www.thedomain.com重定向到www.thedomain.com/subfolder-name(其中子文件夹名称是托管文件夹,即
root/subfolder/wwwroot
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]