使短网址和长网址在同一个域名上一起播放(RewriteRule)

使短网址和长网址在同一个域名上一起播放(RewriteRule)

长话短说,我想同时拥有两者example.com/aJ5example.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 且后面紧跟着行尾字符并且前面紧跟着该/字符的字符串。

相关内容