我有我的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>