如何使用 htaccess 仅在 url 路径上显示 id 值?

How to only show id value on url path with htaccess?

我现在拥有的是

https://www.example.com/link.php?link=48k4E8jrdh

我想要完成的是得到这个 URL 而不是 =

https://www.example.com/48k4E8jrdh

我在网上看了看,但没有成功:(

谁能帮我解释一下这是怎么回事?

这就是我现在所拥有的(我的方向正确吗?)

RewriteEngine On
RewriteRule ^([^/]*)$ /link.php?link=
RewriteRule ^([^/]*)$ /link.php?link=

这很接近,除了它还将匹配 /link.php(URL 被重写为),因此将导致无休止的重写循环(500 内部服务器错误响应返回给浏览器).

您可以通过简单地使正则表达式更具限制性来避免此循环。除了匹配除斜杠(即 [^/])之外的任何内容,您可以匹配除斜杠和点之外的任何内容,因此它不会匹配 link.php 中的点以及任何其他静态资源事.

例如:

RewriteRule ^([^/.]*)$ link.php?link= [L]

如果这是最后一条规则,您应该包括 L 标志。严格来说,如果它已经是最后一条规则,则不需要它,否则,如果您添加更多指令,则需要记住添加它!

如果 URL 中的 id 应仅由小写字母和数字组成,如您的示例所示,则考虑仅匹配所需内容(例如 [a-z0-9]).通常,正则表达式应根据需要进行限制。另外,你期望有多少个字符?目前您允许从到“无限”长度。

以防万一不清楚,您仍然需要将应用程序中 link 的实际 URL 更改为规范形式。 IE。 https://www.example.com/48k4E8jrdh.


更新:

It works but now the site always sees that page regardless if it is link.php or not? So what happens now is this: example.com/idu33d3dh#dj3d3j And if I just do this: example.com then it keeps coming back to link.php

这是因为正则表达式 ^([^/.]*)$ 匹配 0 个或多个字符(由 * 量词表示)。您可能想要匹配至少一个(或最少的)字符?例如,要匹配 1 到 32 个字符,请将量词从 * 更改为 {1,32}。 IE。 ^([^/.]{1,32})$.

顺便说一句,片段标识符 (fragid)(即 # 之后的所有内容)不会传递到服务器,因此这不会影响使用的正则表达式(服务器端)。 fragid 仅由客户端代码(JavaScript 和 HTML)使用,因此严格来说不是 link 值 .[=30 的一部分=]