.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”部分。
我知道有很多类似的,但我没有找到适合我的解决方案。
我有如下传入 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”部分。