изображение не читается на сайте codeigniter? - PullRequest
2 голосов
/ 21 февраля 2011

(Это может относиться к ошибке сервера, поскольку apache вызывает ошибку; при необходимости переместите.)

У меня есть сайт CodeIgniter, на котором я пытаюсь отобразить изображение. Мое изображение хранится впапка ignite / application / images (где на самом деле ignite - это корневая установка CodeIgniter), и вот мой код:

 <td><img src="<?php echo base_url(); ?>application/images/unrav.png" /></td>

В результате отрендеренного источника создается следующий URL:

<td><img src="http://localhost/ignite/application/images/unrav.png" /></td> 

Это ДОЛЖНО работать, но оно не отображает изображение, и когда я перехожу к URL-адресу напрямую, я получаю следующую ошибку:

Access forbidden!

You don't have permission to access the requested object. It is either read-protected or not readable by the server.

If you think this is a server error, please contact the webmaster.

Error 403

localhost
Sun 20 Feb 2011 04:31:02 PM CST
Apache/2.2.14 (Unix) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1

Я проверил разрешения для изображений и установил их в 777 (читай,написать, выполнить для владельца, группы и общественности).Это на моем локальном сервере разработки, и если я захожу в файл / Открыть в своем браузере и перехожу через файловую систему к изображению, оно отображается правильно, поэтому я знаю, что изображение не повреждено или что-то еще.Кто-нибудь может дать мне представление о том, что происходит?До этого момента я строго занимался разработкой, без администратора сервера, так что я совсем не знаком с проблемой apache.

ИЗМЕНЕНО, чтобы добавить журнал ошибок apache:

[Sun Feb 20 16:26:07 2011] [error] [client 127.0.0.1] client denied by server configuration: /opt/lampp/htdocs/ignite/application/images/unrav.png

ИЗМЕНЕНО СНОВА, чтобы добавить .htaccess:

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt|css)
aRewriteRule ^(.*)$ /index.php/$1 [L]

ИЗДАНО СНОВА, чтобы добавить журнал Apache после добавления RewriteBase:

[Sun Feb 20 17:02:19 2011] [notice] suEXEC mechanism enabled (wrapper: /opt/lampp/bin/suexec)
[Sun Feb 20 17:02:19 2011] [warn] RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
[Sun Feb 20 17:02:19 2011] [warn] RSA server certificate CommonName (CN) `localhost' does NOT match server name!?
[Sun Feb 20 17:02:19 2011] [notice] Digest: generating secret for digest authentication ...
[Sun Feb 20 17:02:19 2011] [notice] Digest: done
[Sun Feb 20 17:02:20 2011] [warn] RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
[Sun Feb 20 17:02:20 2011] [warn] RSA server certificate CommonName (CN) `localhost' does NOT match server name!?
[Sun Feb 20 17:02:20 2011] [notice] Apache/2.2.14 (Unix) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1 configured -- resuming normal operations

1 Ответ

4 голосов
/ 21 февраля 2011

Я предполагаю, что ваш файл .htaccess неправильно настроен на , а не запросы на перезапись файлов изображений.Поскольку вы работаете с CodeIgniter не от корня сервера (т. Е. /ignite/), стандартный файл CI .htaccess, вероятно, не соответствует папке images, чтобы не переписать его так, чтобы он указывал на index.php.

Что находится в вашем файле .htaccess?Есть ли директива RewriteBase?Посмотрите запись CI mod_rewrite wiki , чтобы узнать, сможете ли вы получить какие-либо подсказки.Или просто попробуйте

RewriteBase /ignite/ 

... сразу после включения RewriteEngine и посмотрите, что произойдет.

Если это поможет понять, что происходит, стандартный CI .htaccess выглядит примерно так:

RewriteEngine on
RewriteCond $1 !^(index\.php|images|table-images|js|robots\.txt|css)
RewriteRule ^(.*)$ /index.php/$1 [L]

Основным событием является RewriteRule, который выбрасывает все, что входит в конец index.php.Это означает, что вам не нужно иметь index.php в начале ваших URL-адресов CI, то есть вместо http://www.example.com/index.php/controller/method вы можете просто написать http://www.example.com/controller/method.

. Это делается, принимая всеиз пути (^(.*)$) и переписав его в конец index.php.Скобки в шаблоне ^(.*)$ являются группой.Каждой группе присваивается номер, который можно использовать для «обратной ссылки» в другом месте, используя $ n.В этом случае есть только одна группа, и вы можете ссылаться на нее в другом месте как $1.Итак:

RewriteRule ^(.*)$ /index.php/$1 [L]

Означает "захватить все (. *) От начала (^) до конца ($) пути и назвать его $ 1 (потому что это первое выражение в скобках). Затемпереписать путь как /index.php/$1 ", т.е. поместить все в конец index.php.

Теперь, это нормально для большинства вещей - для всех контроллеров и методов - но если выу вас есть статические файлы, которые вы хотите обслуживать, например изображения, вы не хотите проходить через ваши контроллеры, то есть ваш index.php.Это гораздо быстрее, просто обслужить их, даже не пройдя через PHP.

Вот тут и появляется RewriteCond. В этом случае:

RewriteCond $1 !^(index\.php|images|table-images|js|robots\.txt|css)

... что мы 'повторяю: «запускайте следующий RewriteRule только в том случае, если первая группа в его шаблоне (снова $1) не (!) начинается (^) со следующего списка вещей: "index.php", "images", "table-images", "js", "robots.txt" или "css".

И вот как изображения обслуживаются - вместо URL-адресовбудучи переписанным RewriteRule, как если бы был вызов к контроллеру, как и все, что проходит через index.php, они игнорируются, потому что RewriteCond фактически говорит: «Не беспокойтесь о переписывании любых путей, начинающихся с« изображений »»и затем обслуживается Apache в обычном режиме.

Надеюсь, это поможет вам разобраться с тем, что происходит в .htaccess.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...