.htaccess RewriteRule 用于在 javascript 中作为非斜杠添加的多个参数

Posted

技术标签:

【中文标题】.htaccess RewriteRule 用于在 javascript 中作为非斜杠添加的多个参数【英文标题】:.htaccess RewriteRule for multiple parameters added in javascript as non slash 【发布时间】:2020-01-29 16:34:34 【问题描述】:

这个问题可能是重复的。但我没有找到任何解决我的问题的方法。我尝试将 RewriteRule 添加到 htaccess 文件中,该文件将结合斜线静态参数与 window.history.replaceState( , '', '');javascript 中添加的非斜线参数,用于选定的过滤器。 我有两个名为“p”和“a”的静态参数。为此我写了规则:

RewriteRule ^/?([0-9a-zA-Z\_\-]*)/([0-9a-zA-Z\_\-]*)$ index.php?p=$1&a=$2 [NC,L]

但我需要为友好的 url 添加非斜线参数,这将仅在 js 中创建并用于历史记录中的后退操作。我希望那个网址看起来像:

www.page.com/category/pen.html?colour=green

这应该是不友好的:

www.page.com/index.php?p=category&a=pen&colour=green

参数'a'之后的参数可能很多,但应该在.html扩展之后。

到目前为止,我还没有找到任何解决该问题的方法。感谢您的帮助。

编辑

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %HTTP_HOST ^(www\.)?example.com [NC]
RewriteRule ^admin/?$ - [L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^([A-Za-z0-9\-]+)(/([A-Za-z0-9\-\,]+))?$ /index.php?p=$1&a=$3 [L,NC,QSA]

这行得通!

【问题讨论】:

您可以在规则中使用QSA 标志,将原始规则的任何现有查询字符串与您自己创建的查询字符串合并。 这样的可以吗? RewriteRule ^/?([0-9a-zA-Z\_\-]*)/([0-9a-zA-Z\_\-\,]*)\.html?$ index.php?p=$1&a=$2& [QSA,L] 添加了 '.html?'在参数之后的第一部分和第二部分中的“&”。应该正常工作吗? 这不会保留任何现有的查询字符串,它已经是最初请求的 URL 的一部分。 @04FS 谢谢你的建议,所以我编辑了我的 htaccess 文件(在编辑部分),但我得到了 500 内部错误 你的第一条规则匹配everything 可能被^(.*)$ 不加选择地请求,所以你在这里创建了一个无限的重定向循环。 【参考方案1】:

您可以在规则中使用QSA 标志,将原始规则的任何现有查询字符串与您自己创建的查询字符串合并。

https://httpd.apache.org/docs/2.4/rewrite/flags.html#flag_qsa:

当替换 URI 包含查询字符串时,RewriteRule 的默认行为是丢弃现有的查询字符串,并将其替换为新生成的查询字符串。使用 [QSA] 标志会合并查询字符串。

【讨论】:

以上是关于.htaccess RewriteRule 用于在 javascript 中作为非斜杠添加的多个参数的主要内容,如果未能解决你的问题,请参考以下文章

。htaccess对RewriteRule的帮助

在 htaccess 中使用 rewriterule 的页面 slug

.htaccess 中的 RewriteRule 在 app.yaml 文件中转换为啥?

.htaccess 重定向到 404 页面 RewriteRule

将多个 RewriteRule 指令组合成 .htaccess 中的单个规则

RewriteRule ^(.*)/$ ?path=$1 [QSA,L] 在我的 .htaccess 中是啥意思?