这就是我想要做的:当有人使用固定的 32 个字符字符串“文件夹”访问我的网站时,它将重定向到特定网站,并传递此字符串作为参数
例如:
www.example.com/29fe7a48516763c7c3033929e3d4c2a0
将重定向至
www.example.com/myurl?param=29fe7a48516763c7c3033929e3d4c2a0
仅当
29fe7a48516763c7c3033929e3d4c2a0
文件夹不存在且包含 32 个字符时才适用。
我需要使用 .htaccess 文件来执行此操作。
您可以使用正则表达式量词
{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
中使用的,因此您应该删除正则表达式上的 /?
前缀(我已经更新了上述规则)。
但是,如果要在 server 或 virtualhost 上下文中使用它,那么您需要像这样更改规则:
RewriteRule ^/([a-f0-9]{32})$ /myurl?param=$1 [R=302,L]
请注意
RewriteRule
pattern(正则表达式)中的斜杠前缀和附加括号,以及在 substitution字符串中使用
$1
反向引用(而不是 $0
)。您可以将斜杠前缀设置为可选,以允许它在目录(.htaccess
)上下文中工作。