首页 > 解决方案 > (s)html 文件的 .htaccess 重写规则,获取参数丢失

问题描述

因为几个小时我正在尝试创建一个重写规则,而不是一个 php 文件,而应该是一个对 shtml 文件的重写。文件名被改写了,但我总是丢失get参数(调用时没有传递给shtml文件)。如果我对 php 文件做同样的事情,它就可以工作。

不工作: RewriteRule ^search/(.*)$ LookAt.shtml?q=$1 [L,NC]

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

我已经尝试过 QSA 等。不知何故没有任何效果(谷歌为 .p​​hp 返回了很多结果,对于 .(s)html 我没有发现任何有用的东西),我希望有人能给我一个提示,我已经为此发疯了问题....
谢谢!

标签: html.htaccessparametersurl-rewritingget

解决方案


我使用:(console.log(window.location.search);调试问题)

那就是问题所在。您不能使用客户端JavaScript 从重写的 URL 读取查询字符串server-side。给定/search/foo客户端请求中没有查询字符串的请求。

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

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

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

由于您使用的是.shtml我假设您将使用服务器端包含 (SSI) 来访问查询字符串。例如:

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

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


推荐阅读