Help translating Apache RewriteRules

Chris Cortese cortese.consulting at gmail.com
Wed Apr 7 12:23:17 MSD 2010


Thanks for the quick response Igor.

Unfortunately I'm still getting stuck in a loop.

This code which has been handed to me is using both the .htaccess rule 
(shown below) and once it hits index.php (actually an include included 
from index.php) it's also calling a PHP function named rewrite().

Maybe I can do some cleanup later but for now I really just want to be 
able to run the site in my dev environment without having to install 
Apache...

If the nginx rewrite rules will do what the one Apache rewrite rule 
does, it really shouldn't matter what this following code does, I 
wouldn't think.

[code]
/* rewrite url function */
rewrite();
if (isset($_GET['selectLanguage']))
{
	if ($_GET['module'])
	{
		$reloadURL = $_GET['module'];
	}
	foreach ($_GET as $id=>$val)
	{
		if ($id != 'selectLanguage' && $id != 'module')
		{
			$reloadURL .= "/$id/$val";
		}	
	}
	header('Location: '.WWW_ROOT.$reloadURL);
}
function rewrite(){

         /** URL rewriting action **/
		global $_module;
         if(isset($_GET['demand']) && $_GET['demand']!="") {

                 $_action_vars = explode('/', $_GET['demand']);

                 $_module = $_GET['module'] = trim($_action_vars[0]);

                 if(count($_action_vars) > 1) {
                         for ($i = 1; $i < count($_action_vars); $i += 2) {
                                 if($_action_vars[$i] != ''){
                                         if (isset($_action_vars[$i+1])) {
 
$_GET[trim($_action_vars[$i])] = trim($_action_vars[$i+1]);
                                         } else {
 
$_GET[trim($_action_vars[$i])] = '';
                                         }
                                 }
                         }
                 }
         } else {
                 // Setting default values for null request
                 $_module = $_GET['module'] = 'index';
         }
         unset($_GET['demand']);

         foreach($_GET as $key => $val){
                 if($key == '' || $key == null)
                         unset($_GET[$key]);
         }

         /** End of URL rewriting action **/
}
[/code]


On 4/7/2010 1:05 AM, Igor Sysoev wrote:
> On Wed, Apr 07, 2010 at 12:25:37AM -0700, Chris Cortese wrote:
>
>> Hello,
>>
>> I've been using nginx for 1.5 years now with about 10 or so CodeIgniter
>> sites, but apparently I still haven't mastered the rewrite stuff.
>>
>> With the CodeIgniter stuff (and Igor's help), I never had to use the
>> "rewrite" command at all.
>>
>> Anyway, now I need to translate the following (from .htaccess for Apache):
>>
>> RewriteRule ^([0-9a-zA-Z\/\-\_\@]+)$ index.php?demand=$1 [QSA,L]
>>
>> My current conf file is going into a loop and eventually returning nothing:
>>
>> server {
>>     listen 80;
>>     server_name  mysite.com.vmware;
>>
>>     access_log  /usr/local/nginx/logs/mysite.com.access.log;
>>     error_log /usr/local/nginx/logs/mysite.com.error.log;
>>
>>     root /home/mylinuxuser/www/live/mysite.com;
>>     index index.php;
>>
>>     rewrite ^/([0-9a-zA-Z\/\-\_\@]+)$ /index.php?demand=$1 last;
>>
>>     location / {
>>       fastcgi_pass  127.0.0.1:9000;
>>       fastcgi_param SCRIPT_FILENAME
>> /home/mylinuxuser/www/live/mysite.com/index.php;
>>       include /usr/local/nginx/conf/fastcgi_params;
>>     }
>> }
>>
>> --------------
>>
>> Can someone please advise?
>
>      location ~ ^/([0-9a-zA-Z\/\-\_\@]+)$ {
>        fastcgi_pass  127.0.0.1:9000;
>        fastcgi_param SCRIPT_FILENAME
>                      /home/mylinuxuser/www/live/mysite.com/index.php;
>        fastcgi_param QUERY_STRING    demand=$uri;
>        include /usr/local/nginx/conf/fastcgi_params0;
>      }
>
>      location / {
>        fastcgi_pass  127.0.0.1:9000;
>        fastcgi_param SCRIPT_FILENAME
>                      /home/mylinuxuser/www/live/mysite.com/index.php;
>        include /usr/local/nginx/conf/fastcgi_params;
>      }
>
> fastcgi_params0 is copy of fastcgi_params without QUERY_STRING parameter.
>
>




More information about the nginx mailing list