#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.