Converting Rewrite rules

akia nginx-forum at nginx.us
Wed Jun 27 21:42:46 UTC 2012


I'm needing help on converting a htaccess rules to the nginx format.

I've got the software installed in a sub folder called directory. In the
root of that folder there is this .htaccess information:


#Options +FollowSymLinks
#Options -MultiViews
#Options All -Indexes

# This can be uncommented to compress js and css files
#<IfModule mod_deflate.c>
#<FilesMatch "\.(js|css)$">
#    SetOutputFilter DEFLATE
#</FilesMatch>
#</IfModule>

# This can be uncommented to set cache control for image, js, and css
files
#Header unset ETag
#FileETag None
#<FilesMatch "(?i)^.*\.(ico|flv|swf|jpg|jpeg|png|gif|js|css)$">
#Header unset Last-Modified
#Header set Expires "Fri, 21 Dec 2012 00:00:00 GMT"
#Header set Cache-Control "public, no-transform"
#</FilesMatch>

<FilesMatch "\.(htaccess|tpl)$">
  Order Allow,Deny
  Deny from all
</FilesMatch>

<IfModule mod_rewrite.c>
RewriteEngine On

#RewriteRule ^([a-zA-Z]+)\.html$ $1.php [L]

#Handle all category links.  Static category text followed by ID,
followed by path
#The "category" text here needs to be changed if the language variable
category is changed
RewriteRule ^category\/(.+/)location/(.+)$
browse_categories.php?id=$1&location=$2 [L,NC,QSA]
RewriteRule ^category\/(.+)$ browse_categories.php?id=$1 [L,NC,QSA]

#Handle all location links.  Static location text followed by ID,
followed by path
#The "location" text here needs to be changed if the language variable
location is changed
RewriteRule ^location\/(.+)$ browse_locations.php?id=$1 [L,NC,QSA]

#Rewrite pages
RewriteRule ^pages\/(.+)\.html$ page.php?id=$1 [L,NC]

#Rewrite Blog
RewriteRule ^blog.html$ blog.php [L,NC,QSA]
RewriteRule ^blog\/([^/]+)-([0-9]+).html$ blog_post.php?id=$2 [L,NC]
RewriteRule ^blog\/category\/(.+)-([0-9]+).html$ blog.php?category_id=$2
[L,NC,QSA]

#Rewrite listing/banner website out
RewriteRule ^out-([0-9]+)\.html$ out.php?listing_id=$1 [L]
RewriteRule ^out-([0-9]+)-([0-9]+)\.html$
out.php?listing_id=$1&banner_id=$2 [L]

#Rewrite listings
#Ignore any physical files
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)\.html$ listing.php?id=$1 [L,NC]
RewriteRule ^([^/]+)/images\.html$ listing_images.php?id=$1 [L,NC]
RewriteRule ^([^/]+)/send-message\.html$ listing_email.php?id=$1 [L,NC]
RewriteRule ^([^/]+)/send-message-friend\.html$
listing_email_friend.php?id=$1 [L,NC]
RewriteRule ^([^/]+)/reviews\.html$ listing_reviews.php?id=$1
[L,NC,QSA]
RewriteRule ^([^/]+)/add-review\.html$ listing_reviews_add.php?id=$1
[L,NC]
RewriteRule ^([^/]+)/classifieds\.html$ listing_classifieds.php?id=$1
[L,NC,QSA]
RewriteRule ^([^/]+)/documents\.html$ listing_documents.php?id=$1
[L,NC,QSA]
RewriteRule ^([^/]+)/suggestion\.html$ listing_suggestion.php?id=$1
[L,NC]
RewriteRule ^([^/]+)/claim\.html$ listing_claim.php?id=$1 [L,NC]

#Rewrite classifieds
RewriteRule ^classified/[^/]+-([0-9]+)\.html$ classified.php?id=$1
[L,NC]
RewriteRule ^classified/[^/]+-([0-9]+)/images\.html$
classified_images.php?id=$1 [L,NC]

#Rewrite sitemap
RewriteRule ^sitemap.xml$ xml.php?type=sitemap [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ 404.php?id=$1 [L,NC]

</IfModule>

Then in the following subfolders I've got these other ones:

Directory/files
<FilesMatch "\.(php|php3|php4|phtml|pl|cgi)$">
deny from all
</FilesMatch>

and 
Directory/files/upload

<FilesMatch "\.csv$">
deny from all
</FilesMatch>

and
Directory/includes/ckeditor
#
# Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights
reserved.
# For licensing, see LICENSE.html or http://ckeditor.com/license
#

#
# On some specific Linux installations you could face problems with
Firefox.
# It could give you errors when loading the editor saying that some
illegal
# characters were found (three strange chars in the beginning of the
file).
# This could happen if you map the .js or .css files to PHP, for
example.
#
# Those characters are the Byte Order Mask (BOM) of the Unicode encoded
files.
# All FCKeditor files are Unicode encoded.
#

AddType application/x-javascript .js
AddType text/css .css

#
# If PHP is mapped to handle XML files, you could have some issues. The
# following will disable it.
#
AddType text/xml .xml

This is the converted files I've got

# nginx configuration

location /directory/category {
  rewrite ^/category\/(.+/)location/(.+)$
/browse_categories.php?id=$1&location=$2 break;
  rewrite ^/category\/(.+)$ /browse_categories.php?id=$1 break;
}

location /directory/location {
  rewrite ^/location\/(.+)$ /browse_locations.php?id=$1 break;
}

location /directory/pages {
  rewrite ^/pages\/(.+)\.html$ /page.php?id=$1 break;
}

location = /directory/blog.html {
  rewrite ^(.*)$ /blog.php break;
}

location /directory/blog {
  rewrite ^/blog\/([^/]+)-([0-9]+).html$ /blog_post.php?id=$2 break;
  rewrite ^/blog\/category\/(.+)-([0-9]+).html$ /blog.php?category_id=$2
break;
}

location /directory/out {
  rewrite ^/out-([0-9]+)\.html$ /out.php?listing_id=$1 break;
  rewrite ^/out-([0-9]+)-([0-9]+)\.html$
/out.php?listing_id=$1&banner_id=$2 break;
}

location /directory/ {
  if (!-e $request_filename){
    rewrite ^/([^/]+)\.html$ /listing.php?id=$1 break;
  }
  rewrite ^/([^/]+)/images\.html$ /listing_images.php?id=$1 break;
  rewrite ^/([^/]+)/send-message\.html$ /listing_email.php?id=$1 break;
  rewrite ^/([^/]+)/send-message-friend\.html$
/listing_email_friend.php?id=$1 break;
  rewrite ^/([^/]+)/reviews\.html$ /listing_reviews.php?id=$1 break;
  rewrite ^/([^/]+)/add-review\.html$ /listing_reviews_add.php?id=$1
break;
  rewrite ^/([^/]+)/classifieds\.html$ /listing_classifieds.php?id=$1
break;
  rewrite ^/([^/]+)/documents\.html$ /listing_documents.php?id=$1
break;
  rewrite ^/([^/]+)/suggestion\.html$ /listing_suggestion.php?id=$1
break;
  rewrite ^/([^/]+)/claim\.html$ /listing_claim.php?id=$1 break;
  if (!-e $request_filename){
    rewrite ^(.*)$ /404.php?id=$1 break;
  }
}

location /directory/classified {
  rewrite ^/classified/[^/]+-([0-9]+)\.html$ /classified.php?id=$1
break;
  rewrite ^/classified/[^/]+-([0-9]+)/images\.html$
/classified_images.php?id=$1 break;
}

location = /sitemap.xml {
  rewrite ^(.*)$ /xml.php?type=sitemap break;
}

location ~ \.(htaccess|tpl)$ {
  deny all;
}

location ~/files/\.(php|php3|php4|phtml|pl|cgi)$ {
  deny all;
}

location ~ \.csv$ {
  deny all;
}

But this dosn't seem to work, and as I'm new to using nginx I can't get
my head around it. Can anyone help

Posted at Nginx Forum: http://forum.nginx.org/read.php?2,228027,228027#msg-228027



More information about the nginx mailing list