为什么" ^(。*)$"在" ^"中,在RewriteRule中应用于页面资产才不是?

时间:2017-07-20 00:23:14

标签: apache .htaccess mod-rewrite url-rewriting url-redirection

根据a DreamHost article on enforcing HTTPS模式" ^"和" ^(。*)$"导致不同的RewriteRule行为,但我不明白为什么。

根据文章,使用" ^"如下"强制使用https":

重写任何http请求
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

同一篇文章说使用" ^(。*)$"而不是" ^"在RewriteRule"中也强制直接链接的资源(图像,CSS等)使用https"。

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

为什么" ^(。*)$"在" ^"中,在RewriteRule中应用于页面资产才不是?除了文章提到的内容之外,是否存在一些区别元素,例如相对与绝对URL? Apache HTTP Server如何知道资源是页面资产而不是直接请求?

顺便说一下,我已经解释了#34;直接链接资源"特别指的是页面资产,而不是通常意义上的HTTP链接,所以我已经相应地表达了我的问题,但如果我误解了,那么我会很感激任何见解。

1 个答案:

答案 0 :(得分:1)

Imho,它没有任何意义。

我知道某个托管公司有自己的mod_rewrite实现。这两条规则之间的实践差异是什么?

理论上,它们应该完全相同,因为任何URI都匹配^^(.*)$

此外,当目的地甚至不使用正则表达式的部分匹配时(他们使用%{REQUEST_URI}而不使用$1)。

如果它是^$(基本上是空字符串,那么只会重定向根网址)会产生影响。

直接或推荐的访问权限也不会改变,除非您在RewriteCond上使用%{HTTP_REFERER}