Htaccess для статического содержимого не работает!

#php #apache #.htaccess #redirect #http-status-code-301

#php #apache #.htaccess #перенаправление #http-status-code-301

Вопрос:

Итак, я настроил следующие строки, чтобы перенаправить некоторые запросы на мой статический домен:

 RewriteEngine On
RewriteBase /

RewriteRule ^img/(.*)$ http://static.mydomain.com/img/$1 [R=301] 
RewriteRule ^css/(.*)$ http://static.mydomain.com/css/$1 [R=301]
RewriteRule ^js/(.*)$ http://static.mydomain.com/js/$1 [R=301,L]
  

Но по какой-то причине, когда я ссылаюсь, скажем, на картинку:

 <img src="img/icons/hello.png">
  

Он показывает 404, когда он действительно существует на статическом сервере (что на самом деле означает, что он не перенаправляется).

Что я делаю не так? Я потратил около двух часов, пробуя все, что знаю, но исправления не найдено.

Заранее большое вам спасибо. Вот мой полный файл htaccess:

 <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteRule ^img/(.*)$ http://static.mydomain.com/img/$1 [R=301] 
    RewriteRule ^css/(.*)$ http://static.mydomain.com/css/$1 [R=301]
    RewriteRule ^js/(.*)$ http://static.mydomain.com/js/$1 [R=301,L]

    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
    ErrorDocument 404 /index.php
</IfModule> 
  

Комментарии:

1. вы уверены, что у вас включен mod_rewrite в вашем основном httpd.conf?

2. Очевидный вопрос: apache для начала анализирует ваш файл .htaccess? Значение AllowOverride установлено для всех?

3. Да, это точно работает (остальные правила работают, как ожидалось). Однако это не перенаправление на статический!

4. Это странно. Мои RewriteRules в рабочем проекте выглядят почти так же: RewriteRule ^pictures/(.*)$ http://i.staticdomain.ru/pictures/$1 [NC,L,R] . Вы уверены, что указали RewriteBase правильно? / означает, что ваш img URL будет выглядеть следующим образом: http://yourdomain.com/img/someimage.jpg

Ответ №1:

Один из хороших способов отладки перезаписей — указать RewriteLog и RewriteLogLevel. Вы устанавливаете уровень журнала до 9, который регистрирует довольно много информации о перезаписях. Не забудьте отключить ведение журнала после отладки, потому что это довольно тяжело для процесса apache.

Переписать документацию журнала