首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >htaccess删除重定向url上的查询字符串

htaccess删除重定向url上的查询字符串
EN

Stack Overflow用户
提问于 2019-03-19 07:18:03
回答 2查看 655关注 0票数 0

目标-删除查询字符串,如果QS不满足某些条件,则重定向到父url。因此,作为一个例子,这个带有错误QS的url:

代码语言:javascript
复制
https://www.example.com/view.php?id=qqq

应重定向到:

代码语言:javascript
复制
https://www.example.com/view.php

到目前为止我有这样的想法:

代码语言:javascript
复制
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(?!(mk=[1-9][0-9]{0,1}|id=[1-9][0-9]{0,3})$).*$
RewriteRule ^view\.php$ view.php? [L,R]

但它不能工作,要么报告403错误,或500内部服务器错误,或太多的重定向,或没有网站CSS加载等,而检查它在WAMP。

我也试过这个:

代码语言:javascript
复制
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(?!(mk=[1-9][0-9]{0,1}|id=[1-9][0-9]{0,3})$).*$
RewriteRule ^view\.php$ - [L]

它可以很好地重定向,但不删除查询字符串。也尝试用QSD标志。

拜托救救我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-19 09:16:06

试试这个:

代码语言:javascript
复制
RewriteEngine On
RewriteCond %{QUERY_STRING} ^.+$
RewriteCond %{QUERY_STRING} ((?:^|&)id=([^&]+)|(?:^|&)mk=([^&]+))
RewriteRule ^view\.php$ view.php? [L]

第一部分检查以确保存在查询字符串以避免重定向循环。

第二部分检查查询字符串中是否存在id=或mk=参数。

然后,第三部分将view.php重定向到同一个文件(有或没有查询字符串),但是去掉了查询字符串。这可能仍然会在URL中显示一个无用的问号,在这种情况下,看看QSD (querystring )是否更好。注意,最后一条规则使用了L标志。这将防止对当前迭代的任何进一步重写。Apache仍然需要从头开始扫描文件,以确保它不需要进一步重写。

如果这将遇到来自您未向我们展示的其他重写规则的重定向循环,则可能需要在您的.htaccess文件顶部使用如下技巧:

代码语言:javascript
复制
RewriteEngine On

#Break infinite loops
RewriteCond %{ENV:REDIRECT_SKIP_ROOT_HTACCESS_FILE} =1
RewriteRule ^.*$ - [L]


# ...
# more logic can go here
# ...

# trim querystring from bad links
RewriteCond %{QUERY_STRING} ^.+$
RewriteCond %{QUERY_STRING} ((?:^|&)id=([^&]+)|(?:^|&)mk=([^&]+))
RewriteRule ^view\.php$ view.php? [L,ENV=SKIP_ROOT_HTACCESS_FILE=1]

如果您需要测试mk=[1-9][0-9]{0,1}id=[1-9][0-9]{0,3},那么上面的内容应该很容易编辑。只需用数字逻辑替换([^&]+)的实例即可。

票数 1
EN

Stack Overflow用户

发布于 2019-03-19 18:51:23

您的规则很好,超出了这个.* (意为0 or more match ),以及为什么在删除查询字符串循环时发生了这样的情况,因此不需要更多的行,您只能通过这个.+来更改这个部件.*,这意味着1 or more match

代码语言:javascript
复制
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(?!(mk=[1-9][0-9]{0,1}|id=[1-9][0-9]{0,3})$).+$
RewriteRule ^view\.php$ view.php? [L,R]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55235469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档