Apache .htaccess正在连接规则
我有一个.htaccess文件:Apache .htaccess正在连接规则,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我有一个.htaccess文件: Options +FollowSymLinks RewriteEngine on RewriteRule ^([a-zA-Z-]+)\/([0-9]*)\/?$ ler.php?categoria=$1&id=$2 这是我的工作 关键是,在应用此规则后,我需要将所有HTTP重定向到HTTPS 所以我写下: Options +FollowSymLinks RewriteEngine on RewriteRule ^([a-zA-Z-]+)
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^([a-zA-Z-]+)\/([0-9]*)\/?$ ler.php?categoria=$1&id=$2
这是我的工作
关键是,在应用此规则后,我需要将所有HTTP重定向到HTTPS
所以我写下:
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^([a-zA-Z-]+)\/([0-9]*)\/?$ ler.php?categoria=$1&id=$2
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
但这不是我应该做的。当我执行HTTP请求时,我得到了以下信息:
什么是只更改协议而不修改url其他部分的正确代码?
我认为我的代码在第一个规则中执行了2个请求,这就生成了错误的url
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
您从原始的请求_URI
重写,当前是您捕获的内容,请尝试:
RewriteRule (.*) https://%{HTTP_HOST}$1 [R=301,L]
或
如果不起作用,重写日志可能会有用。
L
标志必须应用于重写规则。您可以改为使用此代码
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
RewriteRule ^([^/]+)/([^/]+)/$ /ler.php?categoria=$1&id=$2 [L]
注:
- 您不需要转义斜杠(
可以是\/
)/
- 在使用此代码重试之前,您需要清除浏览器的缓存。你的旧规则现在在缓存中,如果你不清除它,你就看不到新代码在工作
chain
不是个好主意。我提出了另一个答案。
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
RewriteRule ^([^/]+)/([^/]+)/$ /ler.php?categoria=$1&id=$2 [L]