提问人:delphirules 提问时间:8/2/2023 最后编辑:MrWhitedelphirules 更新时间:8/16/2023 访问量:32
如何mod_rewrite重定向特定的字符串长度?
How to mod_rewrite to redirect specific string length?
问:
这是我要做的:当有人使用固定的 32 个字符字符串“文件夹”访问我的网站时,它将重定向到将此字符串作为参数传递的特定站点
例如:
www.example.com/29fe7a48516763c7c3033929e3d4c2a0
将重定向到
www.example.com/myurl?param=29fe7a48516763c7c3033929e3d4c2a0
仅当文件夹不存在且具有 32 个字符时,这才适用。29fe7a48516763c7c3033929e3d4c2a0
我需要使用.htaccess文件来执行此操作。
答:
3赞
MrWhite
8/2/2023
#1
您可以使用正则表达式量词(其中是任意数字)来确定前一个标记的确切数字。{n}
n
看起来这是一个十六进制字符串(仅限字母和数字),而不是字面上的任何字符串,因此正则表达式应相应匹配。a-f
0-9
然后,使用 mod_rewrite您可以执行以下操作来执行“重定向”,如示例所示:
RewriteEngine On
RewriteRule ^[a-f0-9]{32}$ /myurl?param=$0 [R=302,L]
以上是 302(临时)重定向。反向引用包含模式的整个匹配项(即 32 个字符的十六进制字符串的值)。$0
RewriteRule
但是,我认为这应该是内部“重写”,而不是外部“重定向”。即。URL 不应更改。如果是这种情况,则应按如下方式调整规则:
RewriteRule ^[a-f0-9]{32}$ myurl?param=$0 [L]
请注意,删除了替换字符串上的标志和斜杠前缀。请注意,这应该是一个相对的文件系统路径。R
myurl
更新:由于这是在 中使用,您应该删除正则表达式上的前缀(我已经更新了上述规则)。.htaccess
/?
但是,如果要在服务器或虚拟主机上下文中使用,则需要更改规则,如下所示:
RewriteRule ^/([a-f0-9]{32})$ /myurl?param=$1 [R=302,L]
请注意模式中的斜杠前缀和附加括号 (regex),并在替换字符串中使用反向引用 (而不是 )。您可以将斜杠前缀设置为可选,以允许它在目录 () 上下文中工作。RewriteRule
$1
$0
.htaccess
评论
.htaccess