Docs
Rewrites without .htaccess / Short URL
Short URL is good for webpage visitors. You can achieve short URL using rewrites.
nginx has got no .htaccess, where you could set up so popular mod_rewrite.
Never the less, nginx has own module ngx_http_rewrite_module to rewrite URL. Rewrites in nginx are more flexible and comprehensible than Apache's mod_rewrite.
Rewrite rules should be written in an individual website config.
You can convert .htaccess to nginx configuration using our online htaccess-to-nginx converter.
Rewrite rule example
rewrite ^/users/(.*)$ /show.php?user=$1 last;
If the server got a request /users/alex, then it will rewrite this URL to /show.php?user=alex as a result a PHP script /show.php will be run with a GET param user. At the same time, the visitor will see that short URL in his browser.
Example for Drupal
<FilesMatch "\.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(\..*|Entries.*|Repository|Root|Tag|Template)$">
Order allow,deny
</FilesMatch>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]
Configure nginx:
location ~* \.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$ {
deny all;
}
location ~* ^/(\..*|Entries.*|Repository|Root|Tag|Template)$ {
deny all;
}
location / {
try_files $uri /index.php$is_args$args;
## other way:
#if (!-f $request_filename) {
# rewrite ^(.*)$ /index.php;
#}
}
location /favicon.ico {
}
Example for Joomla
RewriteBase /
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteCond %{REQUEST_URI} /component/|(/[^.]*|\.(php|html?|feed|pdf|vcf|raw))$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]
Configure nginx:
location / {
try_files $uri /index.php$is_args$args;
}
Example for Wordpress
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
Configure nginx:
location / {
try_files $uri /index.php$is_args$args;
}
Example for MODX
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} ^.*internal\ dummy\ connection.*$ [NC]
RewriteRule .* - [F,L]
RewriteRule ^(manager|assets) - [L]
# For Friendly URLs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
Configure nginx:
if ($http_user_agent ~* "internal dummy connection") {
return 403;
}
location /manager {
}
location /assets {
}
location / {
try_files $uri /index.php?q=$uri&$args;
## other way:
#if (!-f $request_filename) {
# rewrite ^(.*)$ /index.php?q=$1;
#}
}