# Rewrite

**URL:** <https://www.ruby-forum.com/t/rewrite/219072>\
**Category:** NGINX\
**Created:** [April 20, 2012, 1:54am UTC](https://www.ruby-forum.com/t/rewrite/219072 "2012-04-20T01:54:11Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Gurdipe\_D](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/b77776/32.png) [@Gurdipe\_D](https://www.ruby-forum.com/u/Gurdipe_D)\
**Post date:** [April 20, 2012, 1:54am UTC](https://www.ruby-forum.com/t/rewrite/219072/1 "2012-04-20T01:54:11Z")

</div>

Hello,

i want use rewrite to use article-“id”.php to the post.php?id=1 for  
example.  
I has written the follow in the server section:

location /article-(\d+).php$ {  
try\_files $uri $uri/ /post.php?id=$1;  
}

But it want not run. When i give [http://example.com/blog/article-1.php](http://example.com/blog/article-1.php),  
nginx not change to [http://example.com/blog/post.php?id=1](http://example.com/blog/post.php?id=1)

192.168.0.20 - - [20/Apr/2012:01:52:16 +0200] “GET /blog/article-1.php  
HTTP/1.1”  
404 27 “http://silviosiefke\_de/blog/pdo-read.php” “Mozilla/5.0 (Windows  
NT 5.1)  
AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.162  
Safari/535.19” “-”

Has someone idea whereis the mistake?

Thanks for help.

Regards  
Silvio

---

<div class="post-metadata">

**Author:** ![silviosilva](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/5daacb/32.png) [@silviosilva](https://www.ruby-forum.com/u/silviosilva)\
**Post date:** [April 20, 2012, 1:57am UTC](https://www.ruby-forum.com/t/rewrite/219072/2 "2012-04-20T01:57:53Z")

</div>

2012/4/20 Silvio S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> nginx not change to [http://example.com/blog/post.php?id=1](http://example.com/blog/post.php?id=1)

1. you forgot to put ~ for regex match
2. the one you want is rewrite/return, not try\_files

something like this may work:

location ~ ^/article-(\d+).php$ {  
rewrite ^ /post.php?id=$1 last;  
}

---

<div class="post-metadata">

**Author:** ![silviosilva](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/5daacb/32.png) [@silviosilva](https://www.ruby-forum.com/u/silviosilva)\
**Post date:** [April 20, 2012, 2:44am UTC](https://www.ruby-forum.com/t/rewrite/219072/3 "2012-04-20T02:44:11Z")

</div>

On Fri, 20 Apr 2012 06:56:51 +0700  
Edho A. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> 1. you forgot to put ~ for regex match
> 2. the one you want is rewrite/return, not try\_files

Thanks for help. So i have from this list, with the html files it run.  
But nginx want not use html inside php so i must change the rule.

> something like this may work:
> 
> location ~ ^/article-(\d+).php$ {  
> rewrite ^ /post.php?id=$1 last;  
> }

Is the same, i become “File not found”.

192.168.0.20 - - [20/Apr/2012:02:40:32 +0200] “GET /blog/article-1.php  
HTTP/1.1” 404 27 “http://silviosiefke\_de/blog/index.php” “Mozilla/5.0  
(Windows NT 5.1) AppleWebKit/535.19 (KHTML, like Gecko)  
Chrome/18.0.1025.162 Safari/535.19” “-”

Regards  
Silvio

gentoo-desk db # nginx -V  
nginx version: nginx/1.0.15  
TLS SNI support enabled  
configure arguments: --prefix=/usr --sbin-path=/usr/sbin/nginx  
–conf-path=/etc/nginx/nginx.conf  
–error-log-path=/var/log/nginx/error\_log  
–pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx.lock  
–with-cc-opt=-I/usr/include --with-ld-opt=-L/usr/lib  
–http-log-path=/var/log/nginx/access\_log  
–http-client-body-temp-path=/var/tmp/nginx/client  
–http-proxy-temp-path=/var/tmp/nginx/proxy  
–http-fastcgi-temp-path=/var/tmp/nginx/fastcgi  
–http-scgi-temp-path=/var/tmp/nginx/scgi  
–http-uwsgi-temp-path=/var/tmp/nginx/uwsgi  
–with-http\_addition\_module --with-http\_dav\_module  
–with-http\_realip\_module  
–with-http\_stub\_status\_module --with-http\_sub\_module  
–with-http\_xslt\_module  
–with-http\_realip\_module --with-pcre  
–add-module=/var/tmp/portage/www-servers/nginx-1.0.15/work/agentzh-headers-more-nginx-module-137855d  
–add-module=/var/tmp/portage/www-servers/nginx-1.0.15/work/nginx\_http\_push\_module-0.692  
–add-module=/var/tmp/portage/www-servers/nginx-1.0.15/work/nginx\_upload\_module-2.2.0  
–with-http\_ssl\_module --without-mail\_imap\_module  
–without-mail\_pop3\_module  
–without-mail\_smtp\_module --user=nginx --group=nginx

---

<div class="post-metadata">

**Author:** ![silviosilva](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/5daacb/32.png) [@silviosilva](https://www.ruby-forum.com/u/silviosilva)\
**Post date:** [April 20, 2012, 2:46am UTC](https://www.ruby-forum.com/t/rewrite/219072/4 "2012-04-20T02:46:02Z")

</div>

2012/4/20 Silvio S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> > location ~ ^/article-(\d+).php$ {  
> > rewrite ^ /post.php?id=$1 last;  
> > }
> 
> Is the same, i become “File not found”.

Put the block before all other locations.

---

<div class="post-metadata">

**Author:** ![silviosilva](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/5daacb/32.png) [@silviosilva](https://www.ruby-forum.com/u/silviosilva)\
**Post date:** [April 20, 2012, 3:23am UTC](https://www.ruby-forum.com/t/rewrite/219072/5 "2012-04-20T03:23:49Z")

</div>

Hello,

On Fri, 20 Apr 2012 06:56:51 +0700  
Edho A. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> 1. you forgot to put ~ for regex match
> 2. the one you want is rewrite/return, not try\_files
> 
> something like this may work:
> 
> location ~ ^/article-(\d+).php$ {  
> rewrite ^ /post.php?id=$1 last;  
> }

Ok i have it do, but the result is same, File not found.

The config complete: [http://nopaste.info/af7861f553.html](http://nopaste.info/af7861f553.html)

Regards  
Silvio
