如何mod_rewrite重定向特定的字符串长度?

问题描述 投票:0回答:1

这就是我想要做的:当有人使用固定的 32 个字符字符串“文件夹”访问我的网站时,它将重定向到特定网站,并传递此字符串作为参数

例如:

www.example.com/29fe7a48516763c7c3033929e3d4c2a0

将重定向至

www.example.com/myurl?param=29fe7a48516763c7c3033929e3d4c2a0 

仅当

29fe7a48516763c7c3033929e3d4c2a0
文件夹不存在且包含 32 个字符时才适用。

我需要使用 .htaccess 文件来执行此操作。

regex apache .htaccess mod-rewrite
1个回答
3
投票

您可以使用正则表达式量词

{n}
(其中
n
是任意数字)来确定前面标记的确切数字。

看起来这是一个十六进制字符串(仅限字母

a-f
和数字
0-9
),而不是字面上的任何字符串,因此正则表达式应该相应匹配。

使用 mod_rewrite,您可以执行以下操作来执行“重定向”,如示例所示:

RewriteEngine On

RewriteRule ^[a-f0-9]{32}$ /myurl?param=$0 [R=302,L]

以上是302(临时)重定向。

$0
反向引用包含来自
RewriteRule
pattern 的整个匹配(即 32 个字符的十六进制字符串的值)。

但是,我认为这可能应该是内部“重写”,而不是外部“重定向”。 IE。 URL 不应更改。如果是这种情况,则规则应调整如下:

RewriteRule ^[a-f0-9]{32}$ myurl?param=$0 [L]

请注意删除了

R
标志和 substitution 字符串上的斜杠前缀。请注意,
myurl
应该是相对文件系统路径。

更新: 由于这是在

.htaccess
中使用的,因此您应该删除正则表达式上的
/?
前缀(我已经更新了上述规则)。

但是,如果要在 servervirtualhost 上下文中使用它,那么您需要像这样更改规则:

RewriteRule ^/([a-f0-9]{32})$ /myurl?param=$1 [R=302,L]

请注意

RewriteRule
pattern(正则表达式)中的斜杠前缀和附加括号,以及在
substitution
字符串中使用
$1
反向引用(而不是 $0)。您可以将斜杠前缀设置为可选,以允许它在目录
.htaccess
)上下文中工作。

© www.soinside.com 2019 - 2024. All rights reserved.