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

Вставить каталог корневого уровня для всех запросов изображений

Я работаю над переносом сайта, и мне нужно настроить перенаправление для файлов изображений. Определенные запросы пути к изображению будут приходить в подкаталоги корневого уровня, и мне нужно поставить /new_directory/ как первый каталог для всех, вот так:

Old site request -> new request
website.com/dir1/image.png -> website.com/new_directory/dir2/subdir1/image.gif
website.com/dir2/subdir1/image.gif -> website.com/new_directory/dir2/subdir1/image.gif

Вот что у меня есть, но, похоже, это не работает. Что мне не хватает?

RewriteCond %{HTTP_REQUESTURI} (dir1|dir2|dir3)(.+?)(jpg|png|gif|jpeg)    [NC,OR]
RewriteCond %{HTTP_REQUESTURI} (dir4|dir5|dir6)(.+?)(jpg|png|gif|jpeg)    [NC,OR]
RewriteCond %{HTTP_REQUESTURI} (dir7|dir8|dir9)(.+?)(jpg|png|gif|jpeg)     [NC]
RewriteRule ^(.+?)$  /new_directory/$1 [R=301,L]

У меня есть несколько RewriteCond строки разорваны, потому что мой фактический список каталогов довольно длинный, и я хочу, чтобы правила умещались на одной ширине экрана.

У меня это работает; убедитесь, что у вас есть RewriteEngine on, иначе перенаправления обрабатываться не будут. Если вы хотите узнать, действительно ли mod_rewrite вообще попадает, используйте RewriteLog:

RewriteLog /tmp/rewrite.log
RewriteLogLevel 3

Если вы не получаете никаких выходных данных после перезапуска, mod_rewrite даже не был включен.

Кроме того, вы можете упростить свой код следующим образом:

RewriteCond %{REQUEST_URI} ^/dir[1-9]/.+\./(jpg|png|gif|jpeg)$ [NC]
RewriteRule ^/(.*)$ /new_directory/$1 [R=301,L]

Это будет делать то же самое, что и ваше, за исключением:

  • Это больше не будет соответствовать /some/other/dir1/image.gif, /dir1/jagif, или /dir1isagif.
  • Перенаправленные URL-адреса больше не будут содержать двойных косых черт: /new_directory//dir1/image.gif.
  • Вам больше не нужно беспокоиться о жадных или не жадных поисках.

Сообщите мне, если я неправильно понял ваш вопрос!

Пойдите туда, чтобы проверить свое регулярное выражение http://www.quanetic.com/Regex (конечно, отметьте поле "ereg")

Тогда вот ваш оптимизированный (и протестированный на предыдущем сайте) RewriteRule:

RewriteCond %{HTTP_REQUESTURI} (dir(1|2|3|4|5|6|7|8|9))(.*)\.(jpg|png|gif|jpeg)$
RewriteRule (.*)  /new_directory%3\.%4 [R=301,L]

К вашему сведению,% 3 и% 4 - это то, что извлекается из RewriteCond (= вы игнорируете (. *) В RewriteRule). Пример: с URI "/subrep1/subrep2/mypic.jpg":

Извлеченные подстроки:

%1 = dir1
%2 = 1
%3 = /subrep1/subrep2/mypic
%4 = jpg

Тогда в RewriteRule оно будет преобразовано в:

RewriteRule (.*)  /new_directory%3\.%4 [R=301,L]

Таким образом

/new_directory/subrep1/subrep2/mypic.jpg