.htaccess - rewriting non-friendly URL

2

When I make the request:

http://localhost/project/mycontroller/

URL rewrites to

http://localhost/project/mycontroller/?l=mycontroller

That is, in addition to /mycontroller the .htaccess (I suppose) is concatenating in the url the same parameters of GET only in the unfriendly way.

Note 1: l is my variable of $_GET same and everything works perfectly even if I mess with the non-friendly URL.

Note 2: First I thought it was a redirect, but I put a exit() on the first line of the index and even then the URL continued to rewrite the unfriendly part.

How to solve this?

.htaccess

<Files magic>
ForceType application/x-httpd-php5
</Files>

<IfModule mod_rewrite.c>
RewriteEngine On 
Header append Vary User-Agent       

#?l=local -> /local
RewriteRule ^([a-z0-9_]+)$ ?l=$1 [NC,L]
RewriteRule ^([a-z0-9_]+)/$ ?l=$1 [NC,L]

#?l=local&sl=sublocal -> local/sublocal
RewriteRule ^([a-z0-9_]+)/([a-z0-9_]+)$ ?l=$1&sl=$2 [NC,L]
RewriteRule ^([a-z0-9_]+)/([a-z0-9_]+)/$ ?l=$1&sl=$2 [NC,L]

#?l=local&sl=sublocal&cod=1 -> local/sublocal-1
RewriteRule ^([a-z0-9_]+)/([a-z0-9_]+)/([0-9]+)$ ?l=$1&sl=$2&cod=$3 [NC,L]
RewriteRule ^([a-z0-9_]+)/([a-z0-9_]+)/([0-9]+)/$ ?l=$1&sl=$2&cod=$3 [NC,L]

#?l=local&sl=sublocal&cod=1 -> local/sublocal/var
RewriteRule ^([a-z0-9_]+)/([a-z0-9_]+)/([a-z0-9]+)$ ?l=$1&sl=$2&var=$3 [NC,L]
RewriteRule ^([a-z0-9_]+)/([a-z0-9_]+)/([a-z0-9]+)/$ ?l=$1&sl=$2&var=$3 [NC,L]

</IfModule>
    
asked by anonymous 04.08.2014 / 15:00

1 answer

0

In general, since you do not know what you intend to do or how you will use your .htaccess, to get the query string "l", that would be enough for it:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?l=$1

When calling the address indicated in the question, you would receive "mycontroller /" stored in $ _GET ['l']. This way, you can also pass something like:

seu_dominio/project/mycontroller/segundo_parametro/terceiro_parametro/

what would return:

mycontroller/segundo_parametro/terceiro_parametro/

Just treat the string to separate the data. For example, in PHP:

$qs = explode("/", $_GET['l']);

that would be:

Array (
    [0] => my_controller
    [1] => segundo_parametro
    [2] => terceiro_parametro
    [3] => 
)
    
04.08.2014 / 17:39