RewriteEngine 将 /%25/ 附加到我的目录 http->https

RewriteEngine 将 /%25/ 附加到我的目录 http->https

我的配置文件设置如下:

<VirtualHost *:80>
        RewriteEngine on
        RewriteCond %{HTTPS} off
        RewriteRule (.*) https://example.com/%$1 [R,L]
</VirtualHost>

<VirtualHost *:443>
        ServerAdmin webmaster@localhost
        DocumentRoot /ssd/www/
        SSLEngine on
        SSLCertificateFile /ssd/certs/example_com.crt
        SSLCertificateKeyFile /ssd/certs/example_com.key
        SSLCertificateChainFile /ssd/certs/example_com.ca-bundle
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

问题是,当导航到标准 HTTP 页面时,它会重定向/%25/到域,例如..

http://example.com改为https://example.com/%25/http://example.com/my-category/my-page改为https://example.com/%25/my-category/my-page

答案1

也许第 4 行应该是:

RewriteRule (.*) mydomain.com/$1 [R,L]

%25 是 % 的 URL 编码值

答案2

正如 Vikelidis 已经指出的那样,%$1这是错误的。但是,您还有其他问题需要解决。

RewriteCond端口 80中的 HTTPS(即端口 443)指令检查是VirtualHost多余的,应该删除。

此外,在服务器配置中使用时,该RewriteRule模式与完整的 URL 路径匹配,包括斜线前缀。替换后将产生双斜线。Apache 稍后会折叠此斜线以解析请求,但是在某些情况下它仍然可用,因此可能会破坏后续规则。

此重定向也应是永久的 301,而不是临时的 302(默认值) - 但只有当您确定它正常工作时才更改它。

因此,如果使用 mod_rewrite,则应写成:

<VirtualHost *:80>
    RewriteEngine on
    RewriteRule /(.*) https://example.com/$1 [R=301,L]
</VirtualHost>

再次强调,这里根本不需要 mod_rewrite。mod_aliasRedirect会更高效:

<VirtualHost *:80>
    Redirect 301 / https://example.com/
</VirtualHost>

相关内容