在htaccess中强制HTTPS时隐藏URL的部分内容

时间:2018-02-01 20:08:13

标签: .htaccess url mod-rewrite https clean-urls

这个问题是关于:

  • 强制HTTPS
  • 保持/使网址整洁
  • 捕获所有要定向到路由文件的呼叫

在我的网站上使用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]

0 个答案:

没有答案