如何使用 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 的一部分=]
我现在拥有的是
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 tolink.php
这是因为正则表达式 ^([^/.]*)$
匹配 0 个或多个字符(由 *
量词表示)。您可能想要匹配至少一个(或最少的)字符?例如,要匹配 1 到 32 个字符,请将量词从 *
更改为 {1,32}
。 IE。 ^([^/.]{1,32})$
.
顺便说一句,片段标识符 (fragid)(即 #
之后的所有内容)不会传递到服务器,因此这不会影响使用的正则表达式(服务器端)。 fragid 仅由客户端代码(JavaScript 和 HTML)使用,因此严格来说不是 link 值 .[=30 的一部分=]