Назад | Перейти на главную страницу

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, как заставить это работать?

Остановить процесс перезаписи при обнаружении 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]