.htaccess 重写 url 如果以数字开头并添加完整部分(包括文本)作为另一个 URL 的参数

.htaccess rewrite url if starts with numbers and add the complete part (incl. text) as parameter for another URL

我知道有很多类似的,但我没有找到适合我的解决方案。

我有如下传入 URL:https://example.com/123-frank-street

并希望他们重写为:https://example.com/street/index.php?name=123-frank-street

我试了几十个版本,最接近的是下面这个

RewriteRule ^[0-9]+([A-Za-z0-9-]+)/?$ /street/index_test.php?street= [NC,L]

这只会重写为:https://example.com/street/index.php?name=-frank-street

123 丢失,不知何故无法转发。只有剩下的! 我在这里遗漏了什么或做错了什么?

提前谢谢

一旦你理解了它们的结构,重写规则真的很简单:

  • 左边是一个正则表达式,用于确定规则应匹配浏览器中的 URL 条
  • 在该正则表达式中,您可以使用括号 ()
  • “捕获”URL 的部分
  • 接下来,是您要改为投放的 URL;它可以包含您捕获的部分,使用带编号的占位符 </code>、<code> 等。这完全取决于您将它们放在哪里,Apache 不会猜测
  • 最后,还有作为选项的标志;在您的示例中,您使用“NC”表示“不是 Case-sensitive”,使用“L”表示“最后一条规则,如果匹配则停止”

在您的示例中,您匹配的模式是 ^[0-9]+[A-Za-z0-9-]+/?$,即“从 URL 开始,1 个或多个数字,一个或多个 letters/digits/hyphens,0 或 1尾部斜杠,URL 的结尾。

捕获的唯一部分是([A-Za-z0-9-]+),“一个或多个letters/digits/hyphens”部分;所以它被放入 </code>。所以 URL 的其余部分被“丢弃”只是因为你没有告诉 Apache 你想把它放在任何地方。</p> <p>如果你想捕捉其他部分,只需移动括号,或添加更多。例如,如果您写 <code>^([0-9]+)([A-Za-z0-9-]+)/?$,那么 </code> 将包含“一个或多个数字”部分,而 <code> 将包含“一个或多个 letters/digits/hyphens”部分。