Apache-2.2

Apache mod_rewrite 在 SSL 和非 SSL 配置上的行為不同

  • March 17, 2012

我有一個系統,我在我的伺服器上託管了許多 SSL 站點。我還需要為每個域設置 OAuth,尤其是 Google 和 Yahoo。它們每個都需要在伺服器上安裝驗證文件,以驗證所有權。現在這些文件太多了,以至於它們阻塞了我的根目錄。所以我想設置一個重寫規則來向一個特定的 URL 發送一個請求到一個驗證文件目錄,像這樣:

RewriteRule (^/googlew*.html$) /verifications$1

這會將諸如http://server/google27c81d94580e55dd.html之類的 Google 驗證文件請求發送到http://server/verifications/google27c81d94580e55dd.html,並且無需重寫 URL 即可正常工作。

但是當請求轉到 SSL URL 時,它會失敗。這是我的配置:

<VirtualHost *:80>
           ServerName <domain>
           DocumentRoot /www/public
           RewriteEngine On
           RewriteRule (^/googlew*.html$) /verifications$1 [R]
           RewriteRule (^.*--.html$) /verifications$1 [R]
</VirtualHost>

<VirtualHost <ipaddress>:443>
           SSLEngine On
           ServerName <domain>
           DocumentRoot /www/public
           RackEnv production
           RewriteEngine On
           RewriteRule (^/googlew*.html$) /verifications$1 [R]
           RewriteRule (^.*--.html$) /verifications$1
           SSLProtocol all
           SSLCipherSuite HIGH:MEDIUM
           SSLCertificateChainFile /usr/share/ssl/crt/intermediate.crt
           SSLCertificateFile /usr/share/ssl/crt/<domain>/<domain>.crt
           SSLCertificateKeyFile /usr/share/ssl/crt/<domain>/<domain>.key
</VirtualHost>

因此,當請求是非安全 HTTP 時,它可以正常工作。當它是安全的 HTTPS 時,它會失敗。關於為什麼的任何建議?

更新按要求,這是第 3 級重寫日誌的輸出:

init rewrite engine with requested uri /google27c81d94580e55dd.html
applying pattern '(^/googlew*.html$)' to uri '/google27c81d94580e55dd.html'
applying pattern '(^.*--.html$)' to uri '/google27c81d94580e55dd.html'
pass through /google27c81d94580e55dd.html

現在有趣的是:在發表我的原始文章之前,正如我所說的,非安全版本執行良好。我發布後,非安全版本也停止工作!我剛剛粘貼的日誌條目是我在執行非安全版本時得到的。臉。爆炸。

一些東西:

  • Parens 不應該在你的^and周圍$
  • 您可能的意思是\w*,而不是w*;這將匹配這些字元。
  • 確保您轉義特殊字元

所以,試試這個:

RewriteRule ^(/google\w*\.html)$ /verifications$1 [R]

我沒有遵循您的第二條規則的意圖;你能澄清一下嗎?

引用自:https://serverfault.com/questions/370484