长话短说,我想同时拥有两者example.com/aJ5
并example.com/any-other-url
一起工作。我正在使用 Apache,并且不太擅长编写正则表达式。
我已经有一个全局变量RewriteRule
,它将所有内容发送到应用程序入口点。我需要告诉 apache,if length($path) is <= 5 chars
然后重写到另一个位置。
我知道我可以在正则表达式中使用{1,5}
类似的语法,但不知道这是否是我想要的。
我想在 Web 服务器级别而不是 php 级别实现这一点。如能提供任何帮助,我将不胜感激。
答案1
如果您可以假设该-
字符不会包含在短网址中:
RewriteCond %{REQUEST_URI} ^/([a-zA-Z0-9]){1,5}
RewriteRule ^ /app-entry-point?url=%1 [L]
这尚未经过测试,但类似这样的方法应该可以工作。本质上,您传递了一个条件,如果REQUEST_URI
是类似这样的条件/abc12
,则控制权将切换到您想要的任何处理程序。它将跳过超过 5 个字符或包含“slug”字符“-”或下划线的 URL。
%1
,最后一个RewriteCond
反向引用,将扩展为短 URL。将其置于其他规则之上以首先执行此操作 - 使用此[L]
标志,它将停止重写 URL 并将控制权移交给应用程序。
答案2
RewriteCond %{REQUEST_URI} ^/.{1,5}$
RewriteRule ...
这将匹配长度在 1 到 5 个字符之间的任何请求,并将运行以下 RewriteRule。任何超过该长度的请求都不会运行 RewriteRule。REQUEST_URI 变量是浏览器传递给 Web 服务器的内容。相同的操作可以在单个 RewriteRule 中处理,但如果您需要,上述操作允许链接。
^/.{1,5}$
^ = 匹配字符串的开头
/ = 仅匹配正斜杠
. = 匹配任何一个非换行符的字符
{1,5} = 通知正则表达式引擎匹配前一个字符 1-5 次
$ = 匹配行尾字符
该/.{1,5}$
构造告诉正则表达式引擎匹配任何大小为 1-5 且后面紧跟着行尾字符并且前面紧跟着该/
字符的字符串。