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

时间:2016-09-19 18:38:40

标签: apache .htaccess subdomain

我有一个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',我想避免它

我想知道是否有办法避免这种情况(例如,显示404页面),使用'/usr/www/users/foo/subdomain1'的'.htaccess'文件中的指令。

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

2 个答案:

答案 0 :(得分:1)

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

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]

答案 1 :(得分:1)

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

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