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

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

我有一个系统,在我的服务器上托管了许多 SSL 站点。我还需要为每个域设置 OAuth,特别是 Google 和 Yahoo。它们都要求在服务器上安装验证文件,以验证所有权。现在这些文件太多了,以至于它们堵塞了我的根目录。所以我想设置一个重写规则,将对特定 URL 的请求发送到验证文件目录,如下所示:

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

这将发送 Google 验证文件请求,例如http://服务器/google27c81d94580e55dd.htmlhttp://服务器/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

现在有一件有趣的事情:在我发表原始帖子之前,正如我所说,非安全版本运行良好。在我发表帖子之后,非安全版本也停止工作了!我刚刚粘贴的日志条目是我在运行非安全版本时得到的。脸。爆炸。

答案1

一些东西:

  • 父母不应该在你^身边$
  • 您可能指的是\w*, 而不是w*; 来匹配这些字符。
  • 确保转义特殊字符

那么,尝试一下这个:

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

我没有理解你的第二条规则的目的;你能澄清一下吗?

相关内容