1

我一直在使用question2answer,我正在尝试使用 .htaccess 将整个网站重定向到 https。问题是文件中正在进行重写而变得混乱。

 DirectoryIndex index.php
 <IfModule mod_rewrite.c>
 RewriteEngine On
 #RewriteBase /
 RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
 RewriteRule . %1/%2 [R=301,L]
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^.*$ index.php?qa-rewrite=$0&%{QUERY_STRING} [L]

 RewriteCond %{HTTP_HOST} !^www\.
 RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

 </IfModule>

这就是我到目前为止所拥有的,如果我添加

 RewriteCond %{HTTPS} !^on$
 RewriteRule (.*) https://www.example.com/$1 [R,L]

它确实有效,但它搞砸了重写

 RewriteRule ^.*$ index.php?qa-rewrite=$0&%{QUERY_STRING} [L]

更新

有了这个额外的代码,这就是我得到的:

https://www.example.com/index.php?qa-rewrite=123/this-is-a-title

应该:

https://www.example.com/123/this-is-a-title
4

1 回答 1

2

.htaccess 中重写规则的顺序非常重要,因为规则是从上到下执行的。

试试这个代码:

 DirectoryIndex index.php
 <IfModule mod_rewrite.c>
 RewriteEngine On
 #RewriteBase /

 RewriteCond %{HTTP_HOST} !^www\. [NC]
 RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]

 RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
 RewriteRule . %1/%2 [R=301,L]

 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^.*$ index.php?qa-rewrite=$0 [L,QSA]

 </IfModule>
于 2014-07-13T17:24:38.173 回答