Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache mod_rewrite:对已经进行URL重写的URL执行http到https重定向_Apache_Mod Rewrite_Http Status Code 301 - Fatal编程技术网

Apache mod_rewrite:对已经进行URL重写的URL执行http到https重定向

Apache mod_rewrite:对已经进行URL重写的URL执行http到https重定向,apache,mod-rewrite,http-status-code-301,Apache,Mod Rewrite,Http Status Code 301,问题如下: 我正在执行URL重写,以从带有参数的URL创建规范URL。例如: RewriteRule ^somename/(.*)/(.*.html)$ index.php?pram1=someparam&param2=$1&param3=$2 [QSA,L] 现在,我还想检查页面是否使用https协议,如果没有,则进行301重定向 问题:当使用请求URI时,Apache似乎无法识别新的(规范URL)。相反,REQUEST_URI返回index.php?。。。网址 这使得无法获

问题如下:

我正在执行URL重写,以从带有参数的URL创建规范URL。例如:

RewriteRule ^somename/(.*)/(.*.html)$ index.php?pram1=someparam&param2=$1&param3=$2 [QSA,L]
现在,我还想检查页面是否使用https协议,如果没有,则进行301重定向

问题:当使用请求URI时,Apache似乎无法识别新的(规范URL)。相反,REQUEST_URI返回index.php?。。。网址

这使得无法获取当前(规范URL)、检查HTTPS并在必要时重定向到它

比如说,

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} (somename)
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301]
根本不起作用,因为(somename)不在URI中(请记住,{REQUEST_URI}保存原始URL)

我可以匹配查询字符串,但重定向会将我带到原始URL

RewriteCond %{HTTPS} off
RewriteCond %{QUERY_STRING} (param1)
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301]
在过去的一个小时里,我一直在互联网上寻找解决办法,但我想不出什么办法。我想也许有一种方法可以创建一个环境变量来保存新的(规范的)URL,但也没有找到一种方法

有什么建议可能有用吗

根本不起作用,因为(somename)不在URI中(请记住,{REQUEST_URI}保存原始URL)

不正确,
%{REQUEST\u URI}
实际上是当前URI,在URL文件映射处理管道中通过mod\u rewite或其他模块进行任何损坏之后。您想要的可能是
%{THE_REQUEST}

RewriteCond %{HTTPS} off
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(somename/[^\ ]*)
RewriteRule ^ https://%{SERVER_NAME}/%1 [R=301,L]
然而,我怀疑这不是真正的问题。问题是您放置规则的顺序,并且重定向没有
L
标志。这应该满足您的要求:

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

RewriteRule ^somename/(.*)/(.*.html)$ index.php?pram1=someparam&param2=$1&param3=$2 [QSA,L]