Apache:避免用户访问'www.foo.com/subdomain1/'



我有一个Apache服务器,其主要rootwebdir是'/usr/www/users/foo/'和'foo.com'点在那里。但是,我有一些子域指向它们的目录:

subdomain1.foo.com ---> /usr/www/users/foo/subdomain1
subdomain2.foo.com ---> /usr/www/users/foo/subdomain2

这给我带来了一个问题:如果有人输入'www.foo.com/subdomain1/aboutme.html',他们会发现'subdomain1.foo.com/aboutme.html'有另一个URL,我想避免它。

我想知道是否有任何方法来避免这种情况(例如,显示404页),通过使用指令内的'。

访问"/usr/www/users/foo/subdomain1"文件。

欢迎任何其他解决方案。非常感谢。

您可以将请求重写为特定子域和自定义错误文档的特定路径的组合。这应该是最简单的:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^subdomain1.foo.com$ [NC]
RewriteRule ^subdomain1 http://foo.com/not-found.html [L]

这可以在.htaccess风格文件中完成,也可以在真实的http服务器主机配置中完成。在任何可能的情况下,都应该首选第二种选择。.htaccess风格的文件是出了名的容易出错,难以调试,而且确实使减慢了服务器的速度,通常没有任何原因。它们仅在不能访问实际配置(即:"廉价的托管提供商")或应用程序需要自己编写这些文件(这当然是一个安全噩梦……)的情况下提供。

http服务器主机配置的版本会更短,更简洁,因为主机是隐式设置的:

RewriteEngine on
RewriteRule ^/subdomain1 http://foo.com/not-found.html [L]

您可以在任何子域目录中使用此规则,例如subdomain1/.htaccess来阻止使用主域foo.com的访问:

RewriteEngine on    
RewriteCond %{HTTP_HOST} ^(www.)?foo.com$ [NC]
RewriteRule ^ - [F]

相关内容

最新更新