为什么httpd中的这个RewriteRule不起作用?

为什么httpd中的这个RewriteRule不起作用?

我尝试在 httpd 2.4.4 中设置这个 RewriteCond:

...
RewriteCond expr "%{QUERY_STRING} =~ /welcome/"
RewriteRule ^(.*)$ %1\.html

因此,例如,如果我访问https://localhost/?welcome,我应该看到页面https://localhost/welcome.html

相反,它返回 500 内部服务器错误。为什么?

错误日志内容如下:

由于可能的配置错误,请求超出了 10 次内部重定向的限制。如有必要,请使用“LimitInternalRecursion”增加限制。使用“LogLevel debug”获取回溯。

答案1

尝试:

RewriteCond %{QUERY_STRING}  (welcome)
RewriteRule ^.*$ %1.html

这会将 %1 替换为 RewriteCond 中的匹配组。因为您在这里使用的是静态字符串,所以您只需使用:

RewriteCond %{QUERY_STRING}  welcome
RewriteRule ^.*$ welcome.html

相关内容