.htaccess htaccess URL重定向,使用get参数ID和reduce值

xmd2e60i  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(178)

我想做一个网址重定向到一个新的域检索的ID参数,但只采取前4个字符。有人知道如何做到这一点?
例如,原始url:

http://www.original.example/see/news/actualite.php?newsId=be9e836&newsTitle="blablabla"

收件人:

https://www.new.example/actualites/be9e

我已经测试过:

RewriteCond %{QUERY_STRING} ^newsId=(.*)$ [NC]
RewriteRule ^$ https://www.new.example/actualites/%1? [NC,L,R]
yws3nbqq

yws3nbqq1#

RewriteCond %{QUERY_STRING} ^newsId=(.*)$ [NC]
RewriteRule ^$ https://www.new.example/actualites/%1? [NC,L,R]

这有几个问题:

  1. RewriteRule * 模式 * 中的正则表达式^$只匹配文档根。示例中的URL是/see/news/actualite.php-因此该规则永远不会匹配(并且永远不会处理条件)。
    1.正则表达式^newsId=(.*)$捕获newsId=之后的所有内容,包括任何附加的URL参数。您只需要此特定URL参数的前4个字符。
    顺便说一句,您的现有条件依赖于newsId作为第一个URL参数。也许总是这样,也许不是。但是检查这个URL参数相对来说是微不足道的,不管顺序如何。
    另外,您是否需要区分大小写的匹配?或者总是使用newsId(如示例中所述)。仅在必要时使用NC标志,而不是作为默认值。
    请尝试以下方法:
RewriteCond %{QUERY_STRING} (?:^|&)newsId=([^&]{4})
RewriteRule ^see/news/actualite\.php$ https://www.new.example/actualites/%1 [QSD,R,L]

%1反向引用现在只包含newsId URL参数值的前4个字符(即非&字符),如正则表达式([^&]{4})所示。
QSD标志(Apache 2.4)丢弃重定向响应中的原始查询字符串。不需要在 substitution 字符串后附加?(一个 * 空 * 查询字符串),而在早期版本的Apache中则需要。

更新日期:

我有一个锚链接(#),它是添加在链接的末尾,有没有可能删除它,使一个干净的链接?例如,目前我有:https://www.new.example/news/4565/#title理想情况下:https://www.new.example/news/4565
这里的“问题”是 * 浏览器 * 管理“fragid”(fragid)(即“锚链接(#)”),并通过重定向保存它。换句话说,浏览器将fragid重新附加到来自服务器的重定向响应中。fragid从未发送到服务器,因此我们无法在发出HTTP重定向之前检测到服务器端。
我们唯一能做的就是附加一个 empty fragid(即一个尾随的#),希望浏览器丢弃原始的片段。不幸的是,你很可能会在重定向的URL上出现尾随的#(取决于浏览器)。
例如(简化):

:
RewriteRule .... https://example.com/# [R=301,NE,L]

请注意,这里需要NE标志来防止Apache在重定向响应中对#进行URL编码。
就像我上面说的,浏览器可能会以不同的方式处理这个问题。
进一步阅读:

相关问题