2016-03-10 2 views
0

Итак ... У меня есть несколько миллионов PNG с уникальными именами, которые распространяются по сложной структуре каталогов, которая идет на 15-20 уровней, и я хочу переместить их в каталог/мой/специальный/каталог/Переписывать файлы с определенным расширением в определенный каталог

Я не могу понять способ сделать это с переписывает (не перенаправляет)

Я попытался:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/\.]+).png?$ /my/special/directory/$1.png [R] 

Но это работает на первом уровне только (корень). Я также пробовал

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([a-zA-Z0-9/]+)([^/\.]+).png?$ /my/special/directory/$2.png [R] 

Но это совсем не работает. Как мне это написать?

Я проверяю, чтобы изображение не существовало, потому что в этом vhost есть другие каталоги, которые содержат изображения и останутся такими, какие они есть.

ТИА

ответ

0

Я не очень понимаю, что вы пытаетесь шаблон: ^([^/\.]+).png?$ ...

Почему ? в конце? И почему отказ от объяснения точек в именах файлов? Причина работает это только для «первого уровня», безусловно, является то, что вы явно запретить принятие путей с содержащимися / который бывает разделитель папки ...

Также просто использовать [L] вместо [R], так как вы не хотите перенаправление.

Это дает нам:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.+)\.png$ /my/special/directory/$1.png [L] 

В случае, если вам придется переписать так, что только имя файла захватывается (зависит от структуры ваших ссылок, на самом деле), то это, вероятно, будет хорошим началом:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule /?([^/]+)\.png$ /my/special/directory/$1.png [L] 

Примечание: нет во втором варианте не ведущий ^, так как вы не заинтересованы в том, что путь указан до последнего разделителя папок ...

+0

Я пробовал этот шаблон, поскольку пытался получить имя файла в $ 1 - так что было после последнего /. Иногда имена каталогов содержат точки. Второе правило, которое вы опубликовали, работает на всех уровнях с R (перенаправляет правильно), но при переписывании (L) он не делает - выбрасывает 404. –

+0

Звучит как проблема с абсолютными или относительными путями ко мне ... Можете ли вы разместить базу URL-адрес приложения? – arkascha

+0

Это нормально Я думаю, что я оставлю это как перенаправление, это не будет слишком много накладных расходов, кроме того, я использую CDN. Спасибо, что опубликовали очень полезный ответ! –

Смежные вопросы