htaccess 重写 url 参数中的斜杠

htaccess rewrite slash in url parameter

提问人:poepykooitje 提问时间:7/21/2023 最后编辑:poepykooitje 更新时间:7/21/2023 访问量:35

问:

我有一个PHP文件,它接受两个URL参数,一个“fileUrl”和一个“token”。 使用它时,它看起来像这样: 但是,我在 .htaccess 中将 URL 重写为以下格式时遇到了困难: 我相信由于“media/streams.mpd”中的斜杠,这不起作用。 删除斜杠时,它可以工作。但是,由于使用了不同的子文件夹,因此需要斜杠。/getfile.php?token=randomtoken&fileUrl=media/streams.mpd/randomtoken/media/streams.mpd

我最终得到了这个:

Options +FollowSymLinks
RewriteEngine On
RewriteRule ([^/]+)/([^/]+)$ /getfile.php?token=$1&fileUrl=$2 [QSA,L]

但不幸的是,这不起作用,正如我所说,它只有在没有斜杠的情况下才有效。

有人可以帮我吗,可以这样做吗?

提前致谢!

编辑:我已经考虑过对“fileUrl”进行 URL 编码,但这不适用于 mpd 文件,mpd 文件是分段视频清单,在同一文件夹中有很多文件。

Apache .htaccess url 重写

评论

0赞 MrWhite 7/21/2023
你对正则表达式的理解是什么?标准是什么?是 URL 路径中的所有内容吗?还是应该只匹配某些“文件”?那又如何 - 它是否真的像正则表达式所暗示的那样是除斜杠之外的任何东西,或者它比这更严格?目前,您的正则表达式匹配,这可能太笼统了。[^/]+fileUrlrandomtoken/randomtoken<anything>/<anything-except-slash>/<anything-except-slash>
0赞 arkascha 7/21/2023
您的匹配模式是错误的。取而代之的是,它应该是这样的.因此,它接受任何内容作为请求的 URL 的第二部分,即使它包含斜杠。([^/]+)/([^/]+)$^/?([^/]+)/(.+)/?$
0赞 poepykooitje 7/21/2023
@MrWhite:您好,很抱歉造成混乱,感谢您的回答。我不太清楚,实际上不是使用的字符串,而是变量 base64 json 字符串,例如: 这是带有令牌的 url 的样子: 是的,在令牌之后获取所有内容将是完美的。randomtokeneyJpcCI6IjE5Mi4xNjguMTc4LjEiLCJ0aW1lc3RhbXAiOjE2ODk4NjM2OTJ9/eyJpcCI6IjE5Mi4xNjguMTc4LjEiLCJ0aW1lc3RhbXAiOjE2ODk4NjM2OTJ9/media/streams.mpd
0赞 poepykooitje 7/21/2023
@arkascha:谢谢,我现在确实可以访问php文件了!但是,使用它后,PHP 文件似乎根本无法读取 url 参数。我可能做错了什么?现在我有:Options +FollowSymLinks RewriteEngine On RewriteRule ^/?([^/]+)/(.+)/?$ /getfile.php?token=$1&fileUrl=$2 [QSA,L]
0赞 poepykooitje 7/21/2023
也许我之前应该这么说,但这不是在我的 Web 服务器的根目录中,而是三个“深”的子文件夹。这可能是问题所在吗?

答: 暂无答案