如何用.htaccess重写含斜杠的URL参数为指定路径格式?
解决方案
你的问题出在RewriteRule的正则表达式上:原规则里的第二个捕获组[^/]+仅能匹配不含斜杠的单段字符,但你的fileUrl参数包含子文件夹的斜杠,所以这个正则只能抓到media,而非完整的media/streams.mpd。
修改后的.htaccess规则如下:
Options +FollowSymLinks -MultiViews RewriteEngine On # 仅当请求路径不是真实文件/目录时执行重写 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]+)/(.+)$ /getfile.php?token=$1&fileUrl=$2 [QSA,L]
规则说明:
^([^/]+)/(.+)$:^([^/]+):捕获第一个斜杠前的所有字符作为token(例如randomtoken)(.+):捕获第一个斜杠后的全部内容(包含后续斜杠)作为fileUrl(例如media/streams.mpd)
RewriteCond %{REQUEST_FILENAME} !-f和RewriteCond %{REQUEST_FILENAME} !-d:避免将服务器上真实存在的文件或目录重写到getfile.php,防止干扰正常资源访问-MultiViews:关闭内容协商功能,防止Apache自动匹配同名文件(比如把/randomtoken/media错误解析为/randomtoken/media.php)
这个规则可以完美支持带斜杠的fileUrl参数,同时保留MPD文件所需的路径结构,无需对URL进行编码。
内容的提问来源于stack exchange,提问作者poepykooitje
相关产品推荐
相关产品推荐

