.htaccess RewriteRule for multiple parameters added in javascript as non slash

.htaccess RewriteRule for multiple parameters added in javascript as non slash

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

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

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

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=&a= [L,NC,QSA]

有效!

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

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

When the replacement URI contains a query string, the default behavior of RewriteRule is to discard the existing query string, and replace it with the newly generated one. Using the [QSA] flag causes the query strings to be combined.