.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 的页面 slug
.htaccess 中的 RewriteRule 在 app.yaml 文件中转换为啥?
.htaccess 重定向到 404 页面 RewriteRule