我一直试图通过服务器端口限制对特定子域的访问,例如它只能从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访问它时,我无法正确加载正常内容。我是否正确地进行了重写条件和规则?
谢谢!
答案 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]
这应该对内容进行无声重写。