使用htaccess限制通过特定SERVER_PORT访问子目录

时间:2014-12-26 20:58:43

标签: .htaccess mod-rewrite

我一直试图通过服务器端口限制对特定子域的访问,例如它只能从subdomain.domain.com:8443访问,没有其他端口。

我目前正在为我的虚拟主机使用hostgator,并且已经设置好了subdomain.domain.com指向正确的子目录。

现在在htaccess文件中,我正在尝试这个:

Options +FollowSymLinks
RewriteEngine on
RewriteBase /subdomain
RewriteCond %{SERVER_PORT} !^8443$
RewriteRule   ^  -  [F]
RewriteCond %{SERVER_PORT} ^8443$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/subdomain/$1 [R=301,L]

就阻止其他端口而言,它似乎可以工作,因为访问subdomain.domain.com或www.domain.com/subdomain,我得到403禁止页面。但是当我通过subdomain.domain.com:8443或www.domain.com:8443/subdomain访问它时,我无法正确加载正常内容。我是否正确地进行了重写条件和规则?

谢谢!

1 个答案:

答案 0 :(得分:0)

R=301告诉服务器进行重定向,而不是(静默)重写。因此,当您通过8443加载时,用户将被重定向到http://%{HTTP_HOST}/subdomain/$1而没有端口8443规范,然后它们会被第一个规则阻止。如果您在subdomain.domain.com:8443上执行curl -I,则应该看到301重定向代码而不是200。

删除R = 301并删除最终RewriteRule中的完整域规范以离开:

RewriteRule ^(.*)$ subdomain/$1 [L]

这应该对内容进行无声重写。