微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 .htaccess 重写查询字符串而不改变链接结构

如何解决使用 .htaccess 重写查询字符串而不改变链接结构

我想从 URL 中删除查询字符串并在没有查询字符串的情况下重写它,而不必重新编码链接结构。

添加了这个:

RewriteCond %{QUERY_STRING} .
RewriteRule ^$ /? [R,L]

到我现有的 .htaccss 代码的末尾(因此它是最后完成的事情,因为在此之前还有其他重写规则)但未删除查询字符串。我做错了什么?

这是我当前 .htaccess 文件内容

RewriteEngine On

RewriteRule ^userfiles/ - [L]
RewriteRule ^userdata/ - [L]

RewriteCond %{THE_REQUEST} /index\.PHP\?p=(?!admin)(?!superadmin)((?![^&]*?edit)[^\s&]+) [NC]
RewriteCond %{THE_REQUEST} /index\.PHP\?p=([^\s&]+) [NC]
RewriteRule ^ /%1? [R=301,L,QSA]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ index.PHP?p=$1 [L,QSA]

此外,我还有一个关于如何影响查询字符串作为变量的可用性的一般性问题……换句话说,如果我重新编写 URL 以不显示查询字符串,那么如果在 PHP 中,该查询字符串是否仍然可用?写 $_GET['q'] 还是不再设置? 谢谢

解决方法

对于您展示的样品,请您尝试以下一次。在测试您的 URL 之前,请确保清除浏览器缓存。在重定向删除查询字符串时,因为您的其他规则实际上并未重定向,如果这是您想要的,那么此更改可能会在此处为您提供帮助。

RewriteEngine On
RewriteRule ^userfiles/ - [L]

RewriteRule ^userdata/ - [L]

RewriteCond %{THE_REQUEST} /index\.php\?p=(?!admin)(?!superadmin)((?![^&]*?edit)[^\s&]+) [NC]
RewriteCond %{THE_REQUEST} /index\.php\?p=([^\s&]+) [NC]
RewriteRule ^ /%1? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ index.php?p=$1 [L,QSA]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。