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

我有我的configuration文件设置如下所示:

<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> 

问题是,当它redirect时浏览到一个标准的HTTP页面附加/%25/到域,所以例如..

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

也许4号线应该是:

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

%25是%编码值的%

Vikelidis已经指出, %$1是错误的。 但是,您还有其他问题也应该解决。

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

此外,在服务器configuration中使用时, RewriteRule模式将匹配完整的URLpath,其中包含斜杠前缀。 你的替代将会导致双重斜线。 Apache稍后将其解决,以解决请求,但在某些情况下它仍然可用,因此可能会违反以后的规则。

这个redirect也应该是一个永久的301,而不是一个临时的302(默认) – 但只有当你确定工作正常时才能改变它。

所以,如果使用mod_rewrite,这应该写成:

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

然后再次,你在这里不需要mod_rewrite。 一个mod_alias Redirect会更有效率:

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