bounty将在23小时后过期。回答此问题可获得+50的声誉奖励。muhammad usman正在寻找来自声誉良好来源的答案。
我想删除查询字符串,包括参数和值从网址与htaccess规则。
下面是一些带有查询字符串的URL,这些字符串需要从URL末尾删除。
https://example.com/other-category-slug/page/15/?orderby=price-desc&add_to_wishlist=342
https://example.com/page/62/?option=com_content&view=article&id=91&Itemid=2
https://example.com/page/30/?start=72
https://example.com/other-category-slug/page/12/?add_to_wishlist=9486
https://example.com/other-category-slug/page/15/?add_to_wishlist=9486
https://example.com/other-category-slug/page/4/?orderby=price-desc&add_to_wishlist=332
https://example.com/other-category-slug/page/15/?orderby=price-desc&add_to_wishlist=5736
https://example.com/other- category-slug/page/7/?orderby=popularity
https://example.com/other-category-slug/page/15/?add_to_wishlist=350
https://example.com/category-slug/page/19/?orderby=price-desc
https://example.com/category-slug/page/3/?orderby=date
https://example.com/page/2/?post_type=map
https://example.com/category-slug/page/2/?PageSpeed=noscript
https://example.com/category/page/6/?orderby=menu_order
https://example.com/page/50/?Itemid=wzshaxrogq
https://example.com/category-slug/page/1/?orderby=price&add_to_wishlist=12953
https://example.com/category-slug/this-is-product-slug/?PageSpeed=noscript
https://example.com/category-slug/?add_to_wishlist=15153
https://example.com/page/24/?op
https://example.com/page/68/?iact=hc&vpx=262&vpy=212&dur=2871&hovh=259&hovw=194&tx=104&ty=131&ei=KJ05TtKZOoi8rAfM2ZmPBQ&page=1&tbnh=129&tbnw=97&start=0&ndsp=35&ved=1t%3A429%2Cr%3A9%2Cs%3A0&doing_wp_cron=1466467271.7778379917144775390625
我需要像这样的干净的网址没有查询字符串和参数。category-slug
和product-slug
只是例子。我相信我需要5规则。
https://example.com/category-slug/product-slug/
https://example.com/category-slug/page/15/
https://example.com/category-slug/
https://example.com/page/62/
https://example.com/
下面是我想保留的几个查询字符串。
https://example.com/?attachment_id=123
https://example.com/?p=123
https://example.com/page/12/?fbclid=PAAaaK8eCN
https://example.com/your-shopping-cart/?remove_item=22c1acb3539e1aeba2
https://example.com/category-slug/this-is-product-slug/?add-to-cart=29030
https://example.com/?s=%7Bsearch_term_string%7D
这是我的代码,它不工作。事实上,我不明白正则表达式在他们。
RewriteEngine On
RewriteRule ^(page/[0-9]+)/.+$ /$1? [L,NC,R=301]
RewriteCond %{QUERY_STRING} ^option=.+$ [NC,OR]
RewriteCond %{QUERY_STRING} ^[^=]+$
RewriteRule ^$ /? [L,NC,R=301]
先谢了
1条答案
按热度按时间ffvjumwh1#
是,查询字符串完全匹配
虽然你已经给出了URL路径的例子,但看起来你只需要根据URL的查询字符串部分进行匹配,而不是URL路径?除非相同的查询字符串可能出现在另一个URL路径上,而你想保留?
您只需要关注要删除的查询字符串,而不是要保留的查询字符串。
我相信我需要5条规则。
看起来你只需要一个规则,但是有很多 * conditions *(
RewriteCond
指令),每个查询字符串都有一个 * condition *(因为你说它们是"精确匹配")。尽管,令人困惑的是,您并没有试图在规则中进行"精确匹配",而是使用了一个通用模式(尽管您已经声明您"不理解Regex")。
如果你想要"精确匹配",那么你根本不需要使用正则表达式。你可以在 * CondPattern *(
RewriteCond
指令的第二个参数)上使用=
前缀操作符,使其精确(字典)匹配。例如,请尝试以下内容:
上面的代码重定向到相同的URL路径,但如果原始查询字符串与前面的 * conditions * 中所述的任何一个匹配,则会将其剥离。
QSD
标志(放弃查询字符串)将从请求中删除原始查询字符串。这是Apache 2.4上的首选方法。但是,如果您仍然使用Apache 2.2,则需要附加空查询字符串(就像您在现有规则中所做的那样)。例如:RewriteRule ^ %{REQUEST_URI}? [R,L]
请注意,最后一个
RewriteCond
指令中没有OR
标志。注意:您在要删除的URL/查询字符串列表中两次包含了查询字符串
add_to_wishlist=9486
。首先使用302(临时)重定向进行测试,只有在确认它按预期工作后,才更改为301(永久)。301由浏览器永久缓存,因此可能会使测试出现问题。
确保在测试之前清除浏览器缓存。
使用正则表达式组合条件
使用regex,您可以组合几个条件。例如,以下4个条件可以组合为一个:
与相同(使用regex * alternate *):
是否有可能删除一切(查询字符串和参数等)从所有的URL与
*
的东西,而不是硬编码每个查询字符串?要从 * every * URL中删除 * every * 查询字符串(真的吗?),您可以执行以下操作(不,您不使用
*
):这将从任何URL中删除任何查询字符串。* CondPattern * 中的单个点(
.
)匹配单个字符以检查是否存在查询字符串。但这显然也会删除您想要"保留"的查询字符串。
正则表达式字符
*
是一个量词,它重复前面的标记0次或更多次。(它不是"通配符模式"。)此处不需要它。您需要检查查询字符串是否为 * something *,而不是 * nothing *。还有其他选项: