如何解决尝试删除路径、文件扩展名以及某个查询参数如果存在
我对 .htaccess 还很陌生,但已经接近我需要的东西,但现在卡住了。
输入:https://www.example.com/p/mypage.html
输出:https://www.example.com/mypage
这是通过以下方式实现的:
# Static pages: Remove /p from path and remove .html
RewriteRule ^p(/.*?)(?:\.html)?$ $1 [R=301,L]
# All other posts just remove .html
RewriteCond %{REQUEST_URI} ^/(.+)\.html?$ [NC]
RewriteRule ^ /%1 [L,R=301]
我需要为上述 RewriteRules 中的静态页面和其他帖子删除该查询参数。请注意,通常还会存在其他查询参数,但我不希望删除这些参数。
示例 1:
输入:https://www.example.com/p/mypage.html?param1=a&m=1¶m2=b
所需的输出:https://www.example.com/mypage?param1=a¶m2=b
示例 2:
输入:https://www.example.com/2019/12/mypage.html?param1=a&m=1¶m2=b
所需的输出:https://www.example.com/2019/12/mypage?param1=a¶m2=b
-
/p
(如果存在) -
.html
(如果存在) -
m=1
如果存在(有时它可能是唯一的查询参数,因此也需要考虑)
(顺便说一句,上述三个项目符号对于将网站从 Blogger / Blogspot 转移到 wordpress 的任何人都非常有用,因为它们代表了路径和页面处理方式的差异)
非常感谢您对删除 m=1
(如果存在)的任何帮助。
解决方法
您能否尝试以下操作,按照显示的示例编写。另外,请确保在测试您的 URL 之前清除浏览器缓存。
RewriteEngine ON
# Static pages: Remove /p from path and remove .html
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^p(/.*?)(?:\.html)?$ $1 [R=301,L]
# All other posts just remove .html
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{REQUEST_URI} ^/(.+)\.html?$ [NC]
RewriteRule ^ %1 [L,R=301]
#Check if URI has .html with query string present in it.
RewriteCond %{THE_REQUEST} \s(?:/p)?/(.*)\.html\?(.*)(?:[&?])m=1(.*)\s [NC]
RewriteRule ^ %1?%2%3 [R=301,L]
第二个解决方案:如果您只特别寻找 param1 和 param2 参数,请尝试以下操作。
RewriteEngine ON
# Static pages: Remove /p from path and remove .html
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^p(/.*?)(?:\.html)?$ $1 [R=301,R=301]
#Check if URI has .html with query string present in it.
RewriteCond %{THE_REQUEST} \s(?:/p)?/(.*)\.html\?(param1=[^&]*)(?:[?&])m=1(param2=[^\s]*)\s [NC]
RewriteRule ^ %1?%2%3 [R=301,L]
,
您可以使用此规则删除查询参数(如果存在)并删除 /p
或 .html
。
这是您完整的 .htaccess:
RewriteEngine On
RewriteCond %{THE_REQUEST} \?(.*&)?m=1&?(\S*)\sHTTP [NC]
RewriteRule ^(?:p/)?(.+)(?:\.html)?$ /$1?%1%2 [R=301,NE,NC,L]
# Static pages: Remove /p from path and remove .html
RewriteRule ^p(/.*?)(?:\.html)?$ $1 [R=301,L,NE]
# All other posts just remove .html
RewriteRule ^(.+)\.html$ /$1 [L,R=301,NE]
,
您可以使用以下规则从您的网址中删除 m=1
查询参数。
RewriteEngine on
RewriteCond %{QUERY_STRING} (.*?)&?(?:\bm=1)(.*)$
RewriteRule ^ %{REQUEST_URI}?%1%2 [R,L]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。