2016-09-11 4 views
1

Я работаю с сторонним сайтом, который кэширует файл волны по имени, а не по URL-адресу. У меня много волновых файлов в моей системе с тем же именем, но в разных каталогах, но сторонний сайт воспроизводит неправильный файл при запросе файла с тем же именем, но в другом каталоге.Переписать строку как разделитель путей в правиле перезаписи Apache

Итак, я подумал об удалении косой черты ('/') из url и объединить ее со строкой _dir_separator_, чтобы сделать файл волны уникальным по всей системе.

Как я могу переписать URL-адрес, чтобы все вхождения _dir_separator_ внутренне переписывались, чтобы слэш?

Для например., Запрашивая для этого файла http://mysite/media_dir_separator_voice_scripts_dir_separator_script_en_v11.wav

должны выбрать этот один http://mysite/media/voice_scripts/script_en.wav

Пожалуйста, обратите внимание, структуру каталогов множественного уровня глубоко так переписывания фиксированного количества шаблона не будет работать.

Редактировать: Я передумал и хочу использовать дефис (-) вместо строки _dir_sepator_. Важно, мне нужно, чтобы это работало без перезаписи.

RewriteRule ^([^-]*)-([^-]*-.*) $1/$2 [N] 
    RewriteRule ^([^-]*)-([^-]*)$ $1/$2 [L] 

ответ

0

Если хост включен мод-рерайт и поставил AllowOverride, чтобы предоставить вам возможность устанавливать Htaccess файлы, вы можете использовать следующее:

RewriteEngine On 

RewriteCond %{REQUEST_URI} _dir_separator_ [NC] 
RewriteRule ^(.*)_dir_separator_(.+)$ /$1/$2 [R,L] 

Тестирование он с завитком на моя система дает:

$ curl -LI http://localhost/media_dir_separator_voice_scripts_dir_separator_script_en_v11.wav 

HTTP/1.1 302 Found 
Date: Sun, 11 Sep 2016 05:59:26 GMT 
Server: Apache/2.4.18 (Win64) PHP/7.0.4 
Location: http://localhost/media_dir_separator_voice_scripts/script_en_v11.wav 
Content-Type: text/html; charset=iso-8859-1 

HTTP/1.1 302 Found 
Date: Sun, 11 Sep 2016 05:59:26 GMT 
Server: Apache/2.4.18 (Win64) PHP/7.0.4 
Location: http://localhost/media/voice_scripts/script_en_v11.wav 
Content-Type: text/html; charset=iso-8859-1 

HTTP/1.1 404 Not Found 
Date: Sun, 11 Sep 2016 05:59:26 GMT 
Server: Apache/2.4.18 (Win64) PHP/7.0.4 
Content-Type: text/html; charset=iso-8859-1 

Для использования с дефисом (-) чары cter:

RewriteRule ^(.*)-(.+)$ /$1/$2 [N] 
+0

Я передумал. Вместо _dir_separate_, я предпочитаю идти с простой тире (-). Я уверен, что в них нет ни одной из файлов. Я пробовал это RewriteRule^([^ -] *) - ([^ -] * -. *) $ 1/$ 2 [N] RewriteRule^([^ -] *) - ([^ -] *) $ $ 1/$ 2 [L] Но, похоже, он не работает. Мне нужно переписать решение для работы без перенаправления. – SenG

+0

@SenG Не помещайте флаг 'L'. – hjpotter92

+0

Я использовал ваш точный фрагмент в моем файле vhost, он все еще перенаправляется. Я вижу новый URL-адрес в браузере. – SenG