You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在Apache的.htaccess RewriteRule中截取字符串前20位?

通过Apache RewriteRule直接截取sid前20字符的实现方案

当然可以直接通过修改RewriteRule实现,既能把sid截取到前20字符,还能顺便过滤掉不符合规则的恶意字符。

修改后的.htaccess规则

把原规则中的捕获组从匹配任意长度的允许字符,改成只匹配1到20个符合规则的字符即可,具体代码如下:

RewriteEngine on
RewriteBase /tools

FallbackResource /tools/view.php

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9\ \+_-]{1,20})/$ view.php?sid=$1 [NS,L]

规则说明

  • 捕获组([a-zA-Z0-9\ \+_-]{1,20})会仅匹配URL中前1到20个指定范围内的字符,超出长度的部分会被直接忽略,不会传递给后端view.php。
  • 同时像;/?*这类不在允许列表里的恶意字符,会因为不被捕获组匹配,导致RewriteRule不触发,最终走FallbackResource到view.php,避免恶意字符进入后端。

可选优化:让地址栏显示短URL

如果希望用户输入超长或带恶意字符的URL后,浏览器地址栏自动替换成截取后的标准格式,可以把规则末尾的[NS,L]改成[NS,R=301,L],这样会触发永久重定向,地址栏会更新为example.com/tools/截取后的20字符/。

内容的提问来源于stack exchange,提问作者K997

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 22:15:40