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

Apache:避免用户访问';www.foo.com/subdomain1/';,apache,.htaccess,subdomain,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.h

我有一个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”,他们会在另一个URL中找到“subdomain1.foo.com/aboutme.html”,我希望避免这样做

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


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

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

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]

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

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]

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

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

当然,您当然可以创建指向错误文档的重定向规则,该规则与两个条件相结合:域名和请求的相对路径的组合。然而问题是:你为什么要这么做?为什么不简单地将文档根分开,一切都很好呢?因为我的Web主机提供商允许我访问“/usr/www/users/foo/”,而这里是“foo.com”。如果我尝试创建一个新的“sub1.foo.com”子域,它将位于“/usr/www/users/foo/sub1”中。当然,您当然可以创建指向错误文档的重定向规则,该错误文档附带两个条件:域名和请求的相对路径的组合。然而问题是:你为什么要这么做?为什么不简单地将文档根分开,一切都很好呢?因为我的Web主机提供商允许我访问“/usr/www/users/foo/”,而这里是“foo.com”。如果我尝试创建一个新的“sub1.foo.com”子域,它将位于“/usr/www/users/foo/sub1”中。