RewriteRule mp3 转 php

RewriteRule mp3 转 php

我想将所有 .mp3 文件重写为 php 文件。我不想传递路径

所以 http://localhost/somepath/feb.mp3 http://localhost/feb.mp3

不应该有任何区别。

我想到了:

RewriteRule ^(.*)\.mp3$ /files/read/?file=$1.mp3 [QSA]

我遗漏了什么?也许是 (.*) 之前的一些正则表达式,但是为什么它不选择 mp3 模式并重定向到 /files/read/?file=feb.mp3 ?

这似乎甚至没有捕获 mp3 文件:

applying pattern '^(.*)\.mp3$' to uri 'feb.mp3'

它并不止于此,它经历了另一种情况,并且属于:

applying pattern '^.*$' to uri 'feb.mp3'
pass through /htdocs/project/project-web/feb.mp3

如果能解决这个问题的话非常感谢。

这是我的完整 .htaccess

SetEnv APPLICATION_ENV 开发

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^(.*)\.mp3$ files/read/?file=$1.mp3 [QSA]
RewriteRule ^.*$ index.php [NC,L]

这似乎有效,但是它会重定向它。

 RewriteRule ^(.+).mp3$ http://education.localhost/files/read/?file=$1.mp3 [NC,L]

这可能是因为当此重写规则确实适用时,情况就不会如此:

RewriteRule ^.*$ index.php [NC,L]

因此 files/read/?file=$1.mp3 依赖于 index.php 的角色,有什么办法可以让它工作吗?

答案1

当找到 MP3 时,让重写过程停止,而不是将请求发送到index.php,而是使用[L]标志。

为了使其不关心 MP3 文件名前面的目录路径,您需要排除最后一个斜杠字符之前的任何内容。

那么,尝试一下这个:

RewriteRule ([^/]*)\.mp3$ files/read/?file=$1.mp3 [QSA,L]

或者,您实际上是想重定向客户端,并仍然让它在后续请求中命中 index.php?我猜是这样,因为它是一个查询参数……试试这个:

RewriteRule ([^/]*)\.mp3$ files/read/?file=$1.mp3 [QSA,L,R=301]

相关内容