Rewrite help when files do NOT have a ".php" extension

Edho P Arief edhoprima at gmail.com
Wed Jun 1 17:33:19 MSD 2011


On Wed, Jun 1, 2011 at 7:00 PM, pk899 <nginx-forum at nginx.us> wrote:
> Loving Nginx so far! So much faster and leaner than Apache.
>
> Apologies for this yet another Rewrite rule help after so many threads,
> but one of domains has a special need and I am struggling with Rewrite
> rules.
>
> The logic is simple:
>
> 1. For anything in /site folder, it should treat the static files as it
> is, but all else is php (file names don't have .php extension). Still
> further in this folder:
>
>   a. Within /site/private, it should be password protected
>   b. Within /site/wordpress, there is a wordpress blog
>
> 2. For the main folder  "/" all URLs should be directed to
> "/site/redirect".
>
>
>
> Following is in URI examples, so that it easier to visualize:
>
> (Lines starting with asterisks ** are already working)...
>
>
>
> /abc             --->  /site/redirect?u=abc
> /xyz             --->  /site/redirect?u=xyz
>
> **  /site/abc        --->  /site/abc  (as PHP file)
> **  /site/xyz        --->  /site/xyz  (as PHP file)
>
> ** /site/1.gif      --->  Served as it is, static
> ** /site/2.png      --->  Served as it is, static
>
> ** /site/private/abc  --->  Inside http auth, serve as PHP
> /site/private/   --->  Inside http auth, serve as PHP
> /site/private/index
>
> /site/wordpress/..  ---> This is the usual wordpress thing..
>              The apache rules used to be:
>              <IfModule mod_rewrite.c>
>              RewriteEngine On
>              RewriteBase /site/wordpress/
>              RewriteCond %{REQUEST_FILENAME} !-f
>              RewriteCond %{REQUEST_FILENAME} !-d
>              RewriteRule . /site/wordpress/index.php [L]
>              </IfModule>
>
>
>
> Here is what I have tried so far. I am almost there:
>
>
>    # SERVE CACHE STATIC FILES FIRST
>    location ~*
> \.(xml|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|doc|xls|exe|ppt)$
>  {
>      try_files       $uri    =404;
>      expires         max;
>      access_log      off;
>      log_not_found   off;
>    }
>
>    # http://nginx.org/en/docs/http/converting_rewrite_rules.html
>    location / {
>        try_files
>              $uri
>              /site/redirect?u=$uri
>              @fromphp
>              =404;
>    }
>
>    # FOR ALL THE PHP HANDLING
>    location @fromphp {
>      fastcgi_pass    unix:/dev/shm/php5-fpm.MYDOMAIN.sock;
>      fastcgi_index   index;
>      include         fastcgi_params;
>      fastcgi_param   SCRIPT_FILENAME
> $document_root$fastcgi_script_name;
>      fastcgi_param   PATH_TRANSLATED
> $document_root$fastcgi_script_name;
>      fastcgi_param   SCRIPT_NAME       $fastcgi_script_name;
>    }
>
>    # FOR THE REST OF THE WEBSITE
>    location /site/ {
>
>        fastcgi_pass    unix:/dev/shm/php5-fpm.MYDOMAIN.sock;
>        fastcgi_index   index;
>        include         fastcgi_params;
>        fastcgi_param   SCRIPT_FILENAME
> $document_root$fastcgi_script_name;
>        fastcgi_param   PATH_TRANSLATED
> $document_root$fastcgi_script_name;
>        fastcgi_param   SCRIPT_NAME       $fastcgi_script_name;
>
>        location ~ /site/private/ {
>          auth_basic            "Restricted";
>          auth_basic_user_file
> /home/MYDOMAIN/.htpasswds/public_html/site/private/passwd;
>        }
>
>        location ~ \.php$ {
>          #NOTE: Set "cgi.fix_pathinfo = 0;" in php.ini
>          fastcgi_split_path_info   ^(.+\.php)(/.+)$;
>          fastcgi_pass
> unix:/dev/shm/php5-fpm.MYDOMAIN.sock;
>          fastcgi_intercept_errors  on;
>          fastcgi_index             index.php;
>          fastcgi_param             SCRIPT_FILENAME
> $document_root$fastcgi_script_name;
>          fastcgi_param             PATH_TRANSLATED
> $document_root$fastcgi_script_name;
>          fastcgi_param             SCRIPT_NAME
> $fastcgi_script_name;
>        }
>
>        location ~ /site/wordpress/ {
>          # Wordpress stuff
>          try_files $uri $uri/ /site/wordpress/index.php?q=$uri&$args;
>          if (-f $request_filename)  {  expires 30d;  break; }
>          if (-d $request_filename)  {  break; }
>          if (!-e $request_filename) {  rewrite ^/site/wordpress/(.+)$
> /site/wordpress/index.php?q=$1 last; }
>        }
>
>    }
>
>
>
>

I cried.



More information about the nginx mailing list