Apache 如何限制通过子域访问应用程序?

Apache 如何限制通过子域访问应用程序?,apache,.htaccess,subdomain,Apache,.htaccess,Subdomain,我第一次将应用程序与域绑定,我已将我的应用程序与域绑定,并且它有一个名称 我还有两个子域 api.domain.de admin.domain.de 现在我有一个静态应用程序,它只能通过主域访问,不能通过子域访问 api.domain.de admin.domain.de 我试过的 有人能帮助实现这一点吗 这可能是一种直截了当的方法 它将所有请求外部重定向到与www.example.com不同的任何主机名,同时保留请求的路径和查询字符串 RewriteEngine On RewriteCon

我第一次将应用程序与域绑定,我已将我的应用程序与域绑定,并且它有一个名称

我还有两个子域

api.domain.de
admin.domain.de
现在我有一个静态应用程序,它只能通过主域访问,不能通过子域访问

api.domain.de
admin.domain.de
我试过的


有人能帮助实现这一点吗

这可能是一种直截了当的方法

它将所有请求外部重定向到与www.example.com不同的任何主机名,同时保留请求的路径和查询字符串

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.example\.com$
RewriteRule ^/?(.*)$ https://example.com/$1 [QSA,R=301]
但是,我希望您不希望重定向某些请求。您在问题中提到的两个主机名都表明它们用于特定目的。那么这些请求很可能不应该被重定向

这可以使用额外的内部重写来实现,该重写在应用更通用的重定向之前处理此类请求:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^admin\.example\.com$
RewriteCond %{REQUEST_URI} !^/admin/
RewriteRule ^/?(.*)$ /admin/$1 [END]

RewriteCond %{HTTP_HOST} !^www\.example\.com$
RewriteRule ^/?(.*)$ https://example.com/$1 [QSA,R=301]
显然,这些只是示例,您需要调整它们以满足您的特定需求。你的问题在这里很模糊,所以这是我们能提供的最好的

更新


这对我有用…:

如果可能的话,这些应该是独立的http主机,这样您就可以保持配置独立。如果这是不可能的,例如,因为您使用的是廉价的主机提供商,那么您需要实现一些简单的重写规则,将http主机的请求考虑在内。你会在这里找到很多这样的例子。从右边的unter相关开始…是的,我正在尝试在.htaccess文件中编写一些代码。当然,我理解。这就是为什么我提到了现有的例子。不过,我添加了一个一般性的答案来帮助您开始。@Sachinsah感谢您的更新,感谢您分享您的最终解决方案。几点意见:1。重写条件中的正则表达式应使用\。而不仅仅是。。两者都在这里工作,但只是偶然的。要理解这一点,您需要学习正则表达式。2.重写规则中的模式应为^.*$,更好的是^/?*$,而不仅仅是.*$。3.L标志与R标志没有任何意义,您可以忽略它。是的,我知道它经常被展示,但它毫无意义。4.请使用example.com名称而不是示例主机名。谢谢
RewriteEngine On

RewriteCond %{HTTP_HOST} ^admin\.example\.com$
RewriteCond %{REQUEST_URI} !^/admin/
RewriteRule ^/?(.*)$ /admin/$1 [END]

RewriteCond %{HTTP_HOST} !^www\.example\.com$
RewriteRule ^/?(.*)$ https://example.com/$1 [QSA,R=301]
<IfModule mod_rewrite.c>
RewriteEngine On 

RewriteCond %{HTTP_HOST} ^api.domain.de$ [OR]
RewriteCond %{HTTP_HOST} ^admin.domain.de$
RewriteRule (.*)$ http://domain.de/projectName/$1 [R=301,L]
</IfModule>