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



这个问题可能是重复的。但是我没有找到任何解决我的问题的方法。我尝试将 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标志,将原始规则的任何现有查询字符串与您自己创建的查询字符串合并。

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

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

最新更新