我有一个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]