2017-07-20 89 views
1

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

根据文章,用“^”如下“强迫任何HTTP请求使用HTTPS被改写”:

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中的“^(。*)$”适用于页面资产,而“^”不是?除了文章提到的区别之外,还有一些元素,比如相对网址和绝对网址? Apache HTTP Server如何知道资源是页面资源而不是直接请求?顺便说一下,我已经将“直接链接的资源”解释为专门提到页面资产,而不是通常意义上的HTTP链接,所以我相应地解释了我的问题,但是如果我误解了这一点,那么我会很感激见解。

回答

1

Imho,它没有任何意义。

我知道一些托管公司有他们自己的执行mod_rewrite。这两条规则在实践中有什么不同?

从理论上讲,他们应该做同样的事情任何URI将匹配^^(.*)$

而且当目标甚至不使用正则表达式(他们使用%{REQUEST_URI}而不是$1)的部分比赛。

如果它是^$(基本上,一个空字符串,所以只有根URL将被重定向)有所作为。

直接或称访问不会改变任何事情要么,除非你使用一个RewriteCond%{HTTP_REFERER}

+1

呀,子模式有点怪异的看着我了。也许这是引用子模式的规则的先前版本的遗迹。无论哪种方式,感谢您的见解。接受答案。 –

相关问题