将规则重定向到php查询,但删除请求的url中的所有查询字符串

时间:2019-07-04 17:09:38

标签: php .htaccess

使用.htaccess重定向我的网址,如下所示:

(?<!(?:sm|f?l)(?=ashing))ashi

友好的网址->转换为php网址

docker exec -i "$CLI_ID" bash "./script.sh" PARAM

但是当有人进入站点时,如下所示:

RewriteRule ^b/([^/]+)/([^/]+)? b/view.php?id=$2&name=$1

我不知道如何摆脱domain.com/b/hello/2 -> b/view.php?id=2&name=hello

我尝试了包括[QSD]在内的所有操作,但似乎无法正常工作。

更新

我设法使其与以下各项一起使用,但它执行了两次301重定向,而不是一次:

domain.com/b/hello/2?query=xyz

2 个答案:

答案 0 :(得分:0)

检查在规则末尾添加问号是否会取消从左侧追加查询字符串

RewriteRule ^b/([^/]+)/([^/]+)? b/view.php?id=$2&name=$1? [QSD,L]

答案 1 :(得分:0)

您可以使用其他规则来捕获GET参数并将其删除。

RewriteCond %{QUERY_STRING} .+
RewriteRule ^(.*)$ /$1? [R=301,L]
RewriteRule ^b/([^/]+)/([^/]+)? b/view.php?id=$2&name=$1

要使其仅在/b/子文件夹上起作用,请使用以下命令:

RewriteCond %{QUERY_STRING} .+
RewriteRule ^b/(.*)$ b/$1? [R=301,L]
RewriteRule ^b/([^/]+)/([^/]+)? b/view.php?id=$2&name=$1

第一个规则会将与您的规则匹配的所有内容重定向到没有任何GET参数的URL(请注意,重写规则末尾的?会剥离参数)。

如果无法应用第一个规则,即没有参数,则第二个规则将匹配