(s)html 文件的 .htaccess 重写规则,获取参数丢失

.htaccess Rewrite Rule for (s)html File, Get Parameter lost

几小时后我尝试创建重写规则,而不是 php 文件 结果应该是重写 shtml 文件。 文件名被重写了,但是我总是丢失get参数(调用时没有传递给shtml文件)。 如果我对 php 文件执行相同的操作,它就可以工作。

无效: RewriteRule ^search/(.*)$ LookAt.shtml?q= [L,NC]

有效: RewriteRule ^search/(.*)$ LookAt.php?q= [L,NC]

我已经尝试过 QSA 等。不知何故没有任何效果(Google returns .php 的许多结果, 对于 .(s)html 我没有发现任何有用的东西), 我希望有人能给我提示,我已经被这个问题弄疯了....
谢谢!

I use : console.log(window.location.search); (To debug the issue)

这就是问题所在。您不能使用 客户端 JavaScript 从重写的 URL 中读取查询字符串 服务器端.鉴于 /search/foo 的请求,客户端请求中没有查询字符串。

客户端 JavaScript 只能在浏览器中看到请求的 URL。例如:

// Outputs "https://example.com/search/foo"
console.log(location.href);

同样适用于.php文件。但是您可能在服务器端脚本中检查了 $_GET['q']$_SERVER['QUERY_STRING']

由于您使用的是 .shtml,我假设您将使用 Server-Side-Includes (SSI) 来访问查询字符串。例如:

// Outputs "q=foo"
console.log('<!--#echo var="QUERY_STRING" -->');

如果您只使用客户端 JS,那么您可能只是直接解析请求的 URL 以提取搜索词组。例如。 /search/foo。 (在这种情况下无需重写请求以附加查询字符串。只需重写为 LookAt.shtml 就足够了。)