Я хочу переписать все файлы .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]