azz0r
azz0r

Reputation: 3311

Images logging as 404s with Zend Framework

Due to Zend rewriting URL's to module/controller/action, its reporting that images are coming through as a 404.

Here is the error:

  [_requestUri:protected] => /images/Movie/124/thumb/main.png
                [_baseUrl:protected] => 
                [_basePath:protected] => 
                [_pathInfo:protected] => /images/Movie/124/thumb/main.png
                [_params:protected] => Array
                    (
                        [controller] => images
                        [action] => Movie
                        [124] => thumb
                        [module] => default
                    )

                [_rawBody:protected] => 
                [_aliases:protected] => Array
                    (
                    )

                [_dispatched:protected] => 1
                [_module:protected] => default
                [_moduleKey:protected] => module
                [_controller:protected] => images
                [_controllerKey:protected] => controller
                [_action:protected] => Movie
                [_actionKey:protected] => action

Here is my HTACCESS

SetEnv APPLICATION_ENV development

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

I guess what I need todo is put some sort of image or /design detection so its not routing to index.php

Ideas?

Upvotes: 1

Views: 1414

Answers (7)

Cyril
Cyril

Reputation: 11

You have to add the line

RewriteCond %{REQUEST_FILENAME} -f

Upvotes: 1

Thomas Winsnes
Thomas Winsnes

Reputation: 1961

The logic of the .htaccess rewrite rule you have set there is that if it can't find the file, it will send the request to index.php instead. Which means that if your images aren't reachable (not in the public directory) zend_framework will try to handle it. Which it of course can't.

Upvotes: 1

allnightgrocery
allnightgrocery

Reputation: 1380

I'm using the same .htaccess and setup for a Zend project but am not seeing that behavior.

Just some thoughts that might send you down the right path:

  • Case sensitivity in the path?
  • Path doesn't actually exist, causing Apache to pass to index.php?
  • Apache configuration (globally) or at the VirtualHost level
  • Permissions issue? Does main.png at ./public/main.png render when making your request?
  • Overlapping route pattern within application.ini?
  • Disabling the .htacces for a bit, just to see if it's mapping the directories properly?

Just some ideas. -andrew

Upvotes: 0

Iznogood
Iznogood

Reputation: 12843

You could try changin your htaccess with

RewriteRule !\.(js|ico|gif|jpg|png|css)$ /index.php

witch shoudl let images and other stuff go thru.

Upvotes: 1

tawfekov
tawfekov

Reputation: 5122

you can try this snippet

 <img src="<?=$this->baseUrl('/img/icon_quickstart.png');?>" alt="start" />

Upvotes: 0

falomir
falomir

Reputation: 1169

Place your images folder inside your public location, and as Arnie mentions you are good to go. The same goes for any additional files you might want to include at any of your views, for example CSS files.

/public
   |__ images/
   |__ css/

Cheers. M.

Upvotes: 0

homelessDevOps
homelessDevOps

Reputation: 20726

If you use the default directory structure, it should work when you put your images inside the ./public folder.

Upvotes: 1

Related Questions