我想做一个网址重定向到一个新的域检索的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]
1条答案
按热度按时间yws3nbqq1#
这有几个问题:
RewriteRule
* 模式 * 中的正则表达式^$
只匹配文档根。示例中的URL是/see/news/actualite.php
-因此该规则永远不会匹配(并且永远不会处理条件)。1.正则表达式
^newsId=(.*)$
捕获newsId=
之后的所有内容,包括任何附加的URL参数。您只需要此特定URL参数的前4个字符。顺便说一句,您的现有条件依赖于
newsId
作为第一个URL参数。也许总是这样,也许不是。但是检查这个URL参数相对来说是微不足道的,不管顺序如何。另外,您是否需要区分大小写的匹配?或者总是使用
newsId
(如示例中所述)。仅在必要时使用NC
标志,而不是作为默认值。请尝试以下方法:
%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上出现尾随的#
(取决于浏览器)。例如(简化):
请注意,这里需要
NE
标志来防止Apache在重定向响应中对#
进行URL编码。就像我上面说的,浏览器可能会以不同的方式处理这个问题。
进一步阅读: