sanderdev sanderdev - 1 year ago 124
PHP Question

Why does my rewriterule captures parts from the substitution string instead of the uri

Given this url:

and the following RewriteRule:

RewriteRule ([^/.]+)/?(.*) app/$1.php?$2

I would expect the url to become:

and it does when I use an online htaccess tester. But on my local dev environment I get this:

The requested URL /app/app.php was not found on this server.

Why? This can't be right, right? I suspect it is a bug caused by my setup (docker containers and dinghy-http-proxy) but since I am new to this rewriting I am not sure.

Answer Source

Try this:

RewriteRule ^([^/.]+)/?(.*) app/$1.php?$2

The problem is that the regex can match anywhere in the path string, and since the / is optional the result is unlikely to be what you want.

Also, make sure that you don't have multiple rewrite rules which apply, they will all get processed by default!

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download