.htaccess htaccess-从URL中删除查询字符串,但保留值
我已经搜索了Stackoverflow的所有地方,并在Google上搜索了很多地方,但我无法完成这项看似简单的任务 我试图在htaccess中设置一个规则,通过删除查询字符串来清除URL,但保留其值不变:.htaccess htaccess-从URL中删除查询字符串,但保留值,.htaccess,variables,url,url-rewriting,.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
http://example.local/?p=subscribe
变成:
http://example.local/subscribe
我尝试过以下各种方法:
RewriteEngine on
RewriteCond %{QUERY_STRING}
RewriteRule (.*) /$1? [R=301,L]
或者
或者
但什么都不管用
任何帮助都将不胜感激。您可以使用%检索rewriteCond变量
RewriteCond %{QUERY_STRING} ^p=(.*)$ [NC]
RewriteRule ^(.*)?$ %1? [R=301,L,NC]
将任何url http://site.com/url?qs转换为http://site.com/qs在您的.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]
对不起,不清楚你到底问了什么。“删除查询字符串”的确切含义是什么。浏览器中请求的URL是哪个?该URL应该被重写或重定向到哪个请求?基本上重写URL,以便删除查询字符串“?p=”。但不删除最后一部分“订阅”
/?p=subscribe
变为/subscribe
谢谢你R.Martin,但结果是“404”错误:键入http://tssl-list.dev/?p=preferences
未找到,url更改为:http://tssl-list.dev/home/alan/Public/tssl-list/preferences
@AlanW:Try:重写规则^$/%1?[R=301,L]
@anubhava-谢谢你,它几乎成功了。查询字符串消失,URL格式正确:http://tssl-list.dev/preferences
。但是,它仍然抛出一个404未找到。我不确定这是否相关,但该网站实际上是一个phpList实现。完美谢谢你,阿努巴瓦,成功了。感谢您的帮助。新问题:我在live server上更新了.htaccess,其中phpList位于子目录中:http://example.com/mailinglist/?p=subscribe
现在这些规则不再有效。我尝试将RewriteBase/mailinglist/
添加到规则集,但没有任何效果。我还尝试删除尾随的/
破折号,甚至在我认为有效的地方键入mailinglist/
。救命啊!.htaccess文件位于/mailinglist
子目录中。父网站,example.com
是一个Wordpress安装,它有自己的、独立的htaccess文件。好的,有了更新的代码,网站首先重定向到http://example.com/mailinglist//subscribe
(是的,这是两个斜杠),但在它重定向回根目录后立即http://example.com/mailinglist/。是,双斜杠不见了。但不知何故,所有链接都无缘无故地重定向到根目录。我不是程序员,但这种行为可能是由phpList中的php代码触发的。我应该澄清重定向是这样发生的:http://example.com/mailinglist/?p=subscribe
->http://example.com/mailinglist/subscribe
->http://example.com/mailinglist/
。也许我应该在phpList讨论组中询问一下,看看是否可以对这种异常现象有任何见解。谢谢阿努巴瓦。
RewriteCond %{QUERY_STRING} ^p=(.*)$ [NC]
RewriteRule ^(.*)?$ %1? [R=301,L,NC]
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]