使用.htaccess既可以处理不存在的路径,又可以将http转换为https

时间:2019-04-11 20:33:34

标签: .htaccess

我正在尝试使用.htaccess实现以下目标

1-将所有http请求转换为https 2-捕获任何不存在的路径,并重定向到现有路径,以某种方式(作为查询字符串,哈希,通过信封或post变量)传递不存在的路径进行解释。 3-可以针对特定文件夹同时执行上述两项操作。

当前,我通过将不存在的路径作为散列传递来使#2工作,该散列由客户端脚本解释:

RewriteEngine On
RewriteBase /SomeSubFolder/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ \#$1 [L,R=301,NE]

它在一定程度上起作用 http://[somedomain.com]/[ExistingPath]/[NonExistingPath]

成为

http://[somedomain.com]/[ExistingPath]/#[NonExistingPath]

(即不存在的路径变成标记在现有路径上的哈希,随后通过JS进行解释)

如果有一种不太古怪的方式做到这一点,那么我会不知所措。

到目前为止,我无法将http请求转换为https,同时无法保护上述功能。

1 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

RewriteEngine On
RewriteBase /SomeSubFolder/
#http to https
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R]
#redirect non-existant path
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ \#$1 [L,R=301,NE]

确定规则可以正常使用后,请将https规则中的R更改为R=301,以使重定向永久化(浏览器和搜索引擎已缓存)。