【发布时间】:2017-11-28 03:27:03
【问题描述】:
我将动态内容和静态内容保存在我的 Web 应用程序的不同子域中,但我最近发现,如果直接调用动态内容,可以在我的静态子域 (www.) 上查看动态内容,或者根本没有子域。
网址结构:
http(s)://(subdomain).(domain).(tld)/(static page) OR (direct/random hash) OR (secure/random hash)
所有静态内容都可以通过“WWW”访问,这会导致我的 SEO 友好域,例如
http(s)://www.domain1.com/about
http(s)://www.domain1.com/
http(s)://www.domain2.com/about
http(s)://www.domain2.com/
虽然通过 Web 应用查看的动态内容会从诸如
的域访问http(s)://dynamic1.domain1.com/direct/randomhash
http(s)://dynamic2.domain1.com/direct/randomhash
http(s)://dynamic1.domain2.com/direct/randomhash
http(s)://dynamic2.domain2.com/direct/randomhash
这是我当前的 .htaccess 文件
重写 URI 以secure 或direct 开头的动态链接以及 index.php 文件的任何文件扩展名的规则。
Header set Connection keep-alive
<IfModule mod_dir.c>
DirectorySlash Off
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^index.php - [L]
RewriteRule ^(secure|direct) /index.php [L]
RewriteCond %{REQUEST_URI} !^/server-status
RewriteCond %{REQUEST_URI} !^/public/cache
RewriteRule !\.(png|gif|css|jpg|zip|js|html|htm|swf|ico|fon|ttf|otf|svg|woff|woff2|eot)$ /index.php [L]
</IfModule>
以上内容目前正在运行,但我的问题是,如果用户只是将子域从用于动态内容的子域更改为 WWW,它仍然可以工作,并且会导致可以从我的 SEO 友好子域访问动态内容。
我希望能够编辑此规则RewriteRule ^(secure|direct) /index.php [L],以便在存在活动的www. 子域或没有子域的情况下将其排除在外,同时如果域或子域是其他任何东西,它仍然可以工作。
也就是说子域或域仍然是通配符,除非子域是www.
我假设我必须将 %{HTTP_HOST} 添加到 RewriteRule ^(secure|direct) /index.php [L] 并使用正则表达式来允许任何子域、域和 tld 但我不确定如果 http 主机以 WWW 开头如何排除。或根本没有子域。
我的最终目标是使secure 和direct 路径不能通过www. 或没有子域查看,同时仍与任何其他子域/域一起工作。
【问题讨论】:
-
您是否尝试过检查
RewriteCond中的www.? -
顺便说一句,
png|gif|css|jpe?g|zip|js|html?|swf|ico|fon|[ot]tf|svg|woff2?|eot的性能略好于您当前的正则表达式,并且还允许使用jpeg。 -
所以
/secure和/direct应该只允许来自主域(www 和没有 www)? -
@ctwheels 感谢我做出这些更改的建议!
-
我刚刚实现了他的答案并且它正在工作,标记为已回答;谢谢!
标签: regex .htaccess mod-rewrite