Apache-2.2
Apache mod_rewrite 在 SSL 和非 SSL 配置上的行為不同
我有一個系統,我在我的伺服器上託管了許多 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]
我沒有遵循您的第二條規則的意圖;你能澄清一下嗎?