问题的背景:
我正在通过 cPanel 使用共享主机,而在我当前的主机设置中,我无法创建额外的虚拟主机。目前为了降低成本,我试图避免更多的复杂性,所以我有几个网站符号链接(symbolic link)到 public_html
public_html /
|
|---> siteone.net /
|
|---> sitetwo.com /
|
|---> sitethree.net.au /
|
|-- (etc)
.
问题:
'sitetwo.com' 可以从 siteone.net 访问为 http://siteone.net/sitetwo.com/
.
解决方案的目标:
我的目标是阻止访问其他站点的站点文件夹。我只是模拟虚拟主机,这显然不理想,但我需要再做几个月。
注意:目前域是使用 htaccess 代码路由的,如下所示:
RewriteCond %{HTTP_HOST} ^(www.)?siteone.net$
RewriteCond %{REQUEST_URI} !^/siteone/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /siteone/$1
RewriteCond %{HTTP_HOST} ^(www.)?siteone.net$
RewriteRule ^(/)?$ siteone/index.php [L]
.
尝试的解决方案:
我的目标是将任何未通过 siteone.com 路由到 404 的内容重定向:
RewriteCond %{HTTP_HOST} !^(www.)?siteone.net$
RewriteCond %{REQUEST_URI} ^/siteone.net/
RewriteRule -- serve 404 page ----- [L]
这没有用。 mod_rewrite 手册和谷歌似乎不认为在重写条件下 NOT 逻辑可用于 HTTP_HOST ......否则我没有正确阅读它。
如有任何帮助,我们将不胜感激。
最佳答案
确定将此代码添加为 /siteone.net/.htaccess
中的第一条规则:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www\.)?siteone\.net$ [NC]
RewriteRule ^ - [F]
可选地,如果 sitetwo.com
不存在 .htaccess,则使用:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www.)?sitetwo\.com$ [NC]
RewriteRule ^sitetwo\.com/ - [NC,F]
关于regex - .htaccess 重写除特定 http_host 之外的任何内容的规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20216895/