index.php 301 redirect

SE7EN k1_zeus at yahoo.com
Wed Oct 14 18:13:42 MSD 2009


I have the following configuration for vhost:

server {
            listen   80;
            server_name  www.mydomain.com;
			
			#redirect www to non-www
            rewrite ^/(.*) http://mydomain.com/$1 permanent;
            
			
       }


server {
			listen   80;
			server_name mydomain.com;
            access_log /home/mydomain/log/access.log;
            error_log /home/mydomain/log/error.log;
			
			
			
            location /  {
				root   /home/mydomain/public_html/;
				index  index.php index.html;      
				expires 30d;
						
				#stop image and files hotlinking
				location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|jpeg|css)$ {
				valid_referers none blocked mydomain.com www.mydomain.com *.google.com *.yahoo.com;
				if ($invalid_referer) {
				return 444;
				}
				}
						
				#joomla sef url's
				if (!-e $request_filename) {
					rewrite  ^(.*)$  /index.php?q=$1  last;
					break;
								}
					}
						
				if ( $args ~ "mosConfig_[a-zA-Z_]{1,21}(=|\%3d)" ) {
				set $args "";
				rewrite ^.*$ http://$host/index.php last;
				return 403;
				}

				if ( $args ~ "base64_encode.*\(.*\)" ) {
				set $args "";
				rewrite ^.*$ http://$host/index.php last;
				return 403;
				}

				if ( $args ~ "(\<|%3C).*script.*(\>|%3E)" ) {
				set $args "";
				rewrite ^.*$ http://$host/index.php last;
				return 403;
				}
			
				if ( $args ~ "GLOBALS(=|\[|\%[0-9A-Z]{0,2})" ) {
				set $args "";
				rewrite ^.*$ http://$host/index.php last;
				return 403;
				}

				if ( $args ~ "_REQUEST(=|\[|\%[0-9A-Z]{0,2})" ) {
				set $args "";
				rewrite ^.*$ http://$host/index.php last;
				return 403;
				}
			    
				
			
            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            location ~ \.php$ 
            			{
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            include /usr/local/nginx/conf/fastcgi_params;
            fastcgi_param SCRIPT_FILENAME /home/mydomain/public_html/$fastcgi_script_name;
                        }
       
		  
 	 
		 
		 }

I tried what you suggested but it doesn't work or I didn't add it properly.
--- On Wed, 10/14/09, Igor Sysoev <is at rambler-co.ru> wrote:

From: Igor Sysoev <is at rambler-co.ru>
Subject: Re: index.php 301 redirect
To: nginx at sysoev.ru
Date: Wednesday, October 14, 2009, 4:10 PM

On Wed, Oct 14, 2009 at 05:25:39AM -0700, SE7EN wrote:

> I want to redirect all calls to http://mydomain.com/index.php to http://mydomain.com to avoid duplicate pages.I use this
> if ($request_uri ~* "^/index.php\??$") {
>     rewrite ^.*$ http://$host? permanent;
> }
> 
> but it doesn't seem to work properly. Although it redirects I cannot login or logout anymore in Joomla, it simply redirect to homepage without login or logout. What am i missing here ? How do i do this properly ? Of course if i remove that everything i fine, it works for example for home.html but not for index.php.
> Thank you.

The right way is to use

   location = /index.php {
       rewrite ^  http://$host? permanent;
   }

However, if you have the following configuration:

   location / {
       index  index.php;
   }

   location = /index.php {
       rewrite ^  http://$host? permanent;
   }

then the "/" request will be internally redirected to "/index.php".
Therefore you should use something

   location = /index.php {
       if ($request_uri = /index.php) {
           rewrite ^  http://$host? permanent;
       }

       ...
   }

How do login and logout URLs look ?


-- 
Igor Sysoev
http://sysoev.ru/en/




      
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://nginx.org/pipermail/nginx/attachments/20091014/2abae6bc/attachment.html>


More information about the nginx mailing list