(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
就足够了。)
几小时后我尝试创建重写规则,而不是 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
就足够了。)