htaccess-从URL删除查询字符串但保留值

时间:2019-01-08 20:10:20

标签: .htaccess variables url url-rewriting

我在Stackoverflow和Google各处进行了广泛搜索,但无法完成看似简单的任务。

我试图在htaccess中设置一条规则,以通过删除查询字符串来清理URL,但保持其值不变:

http://example.local/?p=subscribe

成为:

http://example.local/subscribe

我尝试了以下各种方法:

RewriteEngine on
RewriteCond %{QUERY_STRING}
RewriteRule (.*)  /$1? [R=301,L]

RewriteCond %{QUERY_STRING} ^p=$ [NC]
RewriteRule ^(/?)?$ $1? [R=301,L,NC]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\?([^\ ]+)
RewriteRule ^$ /%1? [R=301,L]

但是没有任何效果!

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

在您的.htaccess文件中添加以下内容:

RewriteEngine On

RewriteCond %{THE_REQUEST} \s/([^?]*?)/?\?p=([^\s&]+)\s [NC]
RewriteRule ^ /%1/%2? [R=301,L,NE]

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

答案 1 :(得分:0)

您可以使用%来获取rewriteCond变量

CreateHandleComponents.tt

将所有URL http:/site.com/url?qs转换为http:/site.com/qs