Переписать правила для каталога ресурсов - PullRequest
1 голос
/ 16 января 2020

Я пытаюсь сделать следующее:

  1. Перенаправление https://www.example.com/website на https://www.example.com/website2020

  2. Получить изображения для отображения на моем стр. При просмотре страницы я разбил изображения, которые не отображаются, поскольку он ищет изображения, расположенные: https://www.example.com/website/assets/

Изображения переместились на https://www.example.com/website2020/assets/

   ### Redirect seems to be working
   RedirectMatch 302   (?i)^/website(/.*)?$ /website2020 
   ### Rewrite rule not working
   RewriteRule  ^/website/assets(/.*)?$  /website2020/assets 

Как бы я переписал, чтобы он отображал изображения при просмотре веб-страницы?

Ответы [ 2 ]

0 голосов
/ 17 января 2020

Ответ в обратном порядке ...

Получить изображения для отображения на моей странице. При просмотре страницы у меня повреждены изображения, которые не отображаются, поскольку он ищет изображения, расположенные: https://www.example.com/website/assets/

Если изображения переместились (изнутри) и вы не можете чтобы изменить исходный код HTML, вам следует подумать о реализации внутренней перезаписи для ваших активов, а не о внешней переадресации. Внешний редирект будет безнадежно неэффективным, особенно если у вас много изображений. (Внешнее перенаправление все еще может использоваться для основного URL - см. Ниже.)

### Rewrite rule not working
RewriteRule  ^/website/assets(/.*)?$  /website2020/assets 

В .htaccess URL-путь, соответствующий шаблону RewriteRule не начинается с sla sh. Вы также не можете скопировать запрошенный «актив» (изображение). Если это относится только к изображениям (как вы предлагаете), тогда рассмотрите только соответствующие изображения.

Например, попробуйте это вверху вашего .htaccess файла:

RewriteEngine On

# Internally rewrite assets
RewriteRule  ^website/assets(/.*)?$  /website2020/assets$1 [L]

Флаг L необходим, если у вас есть другие директивы mod_rewrite позже в файле.

  1. Перенаправление https://www.example.com/website на https://www.example.com/website2020

Если вы реализовали внутреннее переписывание, как описано выше, то вам следует реализовать перенаправление с помощью mod_rewrite, а не mod_alias RedirectMatch (который выполняется позже).

Например:

RewriteEngine On

# Redirect everything, except assets
RewriteCond %{REQUEST_URI} !^/website/assets
RewriteRule ^website(/.*)?$ /website2020$1 [R=302,L]

# Internally rewrite assets
RewriteRule  ^website/assets(/.*)?$  /website2020/assets$1 [L]
0 голосов
/ 16 января 2020

Просто попробуйте простое правило, подобное этому:

RedirectMatch 302 (?i)^/website(/.*)?$ /website2020$1

$1 - это обратная ссылка группы захвата # 1, т.е. (/.*).

...