我在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]
但是没有任何效果!
任何帮助将不胜感激。
答案 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