.htaccess重写规则,用于除特定http_host之外的任何内容

时间:2013-11-26 12:18:26

标签: regex apache .htaccess mod-rewrite url-rewriting

问题的背景:

我正在通过cPanel使用共享主机,而在我当前的主机设置中,我无法创建其他虚拟主机。目前为了降低成本我试图避免更多的复杂性,所以我有几个网站符号链接到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手册和谷歌似乎并不认为在重写条件下对HTTP_HOST提供NOT逻辑...或者我没有正确阅读它。

我们将非常感激地提供任何帮助。

1 个答案:

答案 0 :(得分:1)

确定将此代码添加为/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]