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



我想从URL中删除查询字符串并重写它,而不需要重新编码链接结构。

我添加了这个:

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

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

这是我当前。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]

最新更新