这个问题是关于:
在我的网站上使用SSL之前,我有一个RewriteRule,如:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /directory/file.php?url=$1 [NC,L,QSA]
强制所有请求转到/ directory /中的file.php,但URL看起来像(很可爱):
http://example.com
这样所有/ argument / argument2 / argument3等都可以在URL之后添加作为file.php中的参数并进行处理,如下所示:
$args = array_filter(
explode("/", htmlspecialchars($_GET["url"])), function($value) { return $value !== ''; }
);
然后我补充说:
RewriteCond %{HTTPS} =off
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/directory/file.php?url=$1 [NC,L,QSA]
希望URL看起来像这样并指向同一个文件:
https://www.example.com/
但现在网址如下所示:
https://www.example.com/directory/file.php?url=index.html
它不只是更改为https并添加了/directory/file.php?url=,它还将index.html添加到URL。
完全重写看起来像这样:
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/directory/file.php?url=$1 [NC,L,QSA]
编辑:
所以我通过
修复了它RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule (.*) https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule "^(.*)$" "/directory/file.php?url=$1" [NC,L,QSA]