Call us Toll-Free:
Live ChatEmail us


How to hide .php extension in your urls with Nginx

Adrian Singer, 11-04-2010
Looking for clean urls (/hello instead of /hello.php)?

Here's how to set it up:

Step 1

Create a notfound.php script and place it in your root web server folder

// Set this for easier access
$url = substr($REQUEST_URI,1);

// Strip parameters
if (($pos = strpos($url,"?"))>0)
$url_parameters = substr($url, $pos+1);
$url = substr($url, 0, $pos);
$url = trim(strtolower($url));

// Strip prefix and suffix '/'
if ($url[0]=='/') $url = substr($url,1);
if (
if (
$url[strlen($url)-1]=='/') $url = substr($url, 0, strlen($url)-1);

// If url starts with .. it's a hack attempt
if (Strcasecmp(substr($url,0,2),"..")==0)
$url = str_replace("..","",$url);

// If we have a php script with this name
if (file_exists($url.".php"))
// Set PHP_SELF and REQUEST_URI to point to the real script
  if (!empty(
$url_parameters)) $_SERVER['REQUEST_URI'] = $REQUEST_URI .= "?".$url_parameters;

// Load real php script

Step 2

Update your Nginx nginx.conf file, rewriting all urls where the file is not found, to notfound.php

      if (-
d $request_filename)
      if (!-
f $request_filename)
rewrite ^(.*)$ /notfound.php?$1 last;

Note: This is different than doing an error_document 404 redirect. With a 404 redirect, HTTP_POST data is not preserved.

Josh Fraser, 11-04-2010
Isn't there something similar to .htaccess for Nginx? I'd expect you should be able to do something more like this:

RewriteRule ^([^.?]+)$ %{REQUEST_URI}.php [L]

drew, 08-15-2011
Thanks buddy
josh fraser
yours is much better Thanks

Amer, 09-06-2011
I could not find nginx.conf file !!

Rajeev Jha, 10-20-2011
I just do not understand it. if all you are doing is redirect to a pHP script that uploads the file then you may as well do that with a rewrite rule in Nginx. why do all this drama? Also, checking file existence with -f in Nginx 0.7.6 onwards qualifies as "stupid things you should not do", use try_files instead.
Enjoyed this post?

Subscribe Now to receive new posts via Email as soon as they come out.

Post your comments

Note: No link spamming! If your message contains link/s, it will NOT be published on the site before manually approved by one of our moderators.

About Us  |  Contact us  |  Privacy Policy  |  Terms & Conditions