.htaccess doesn't rewrite the URL as it should - php

I have the following .htaccess file:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]
RewriteRule ^search/([^/]+)/?$ search.php?q=$1
RewriteRule ^user/([^/]+) user.php?proc=$1
When I go to: http://localhost/user/register/, and try to echo the variable $_GET["proc"], I get: register.php instead of register. Where is my mistake?

Ordering of your rules seems to be a problem here.
Keep your .htaccess like this:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]
RewriteRule ^search/([^/]+)/?$ /search.php?q=$1 [L,QSA]
RewriteRule ^user/([^/]+) /user.php?proc=$1 [L,QSA]
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^([^/]+)/$ /$1.php
RewriteCond %{DOCUMENT_ROOT}/$1/$2.php -f
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php [L]

Related

How can remove .php extention from url using .htaccess?

How can I remove the ".php" file extension from a URL in php, and replace question marks with slashes?
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [NC,L]
Try this
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

rewriteRule .htaccess not working properly

I'm trying to do a RewriteRule in .htacess but it's not working and I don't know why.
This is my code
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+?)/?$ $1.html [L]
Options +FollowSymLinks
RewriteCond %{HTTP_HOST} ^www\.(.*)
RewriteRule (.*) http://%1/$1/$2 [R=301,L]
RewriteRule ^agencia/agencia-marketing-digital-bh$ /agencia/section.php?id=$1 [L]
How it should work:
User acess www.mysite.com/agencia-marketing-digital-bh.php and it should change to www.mysite.com/agencia/agencia-marketing-digital-bh.php
Can someone please tell me what I'm doing wrong?

How to remove html and php extensions from URL

Hello I'm trying to hide html and php extension from my site URLs and here's my .htaccess file
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/install -d
RewriteCond %{REQUEST_URI} !(install) [NC]
RewriteRule ^(.*) /install/ [L,redirect=302]
RewriteCond %{REQUEST_URI} ^(.+)\!$
RewriteRule ^(.*) stats.php?url=$1 [L]
RewriteCond %{REQUEST_URI} ^(.+)\~s$
RewriteRule ^(.*) stats.php?url=$1 [L]
RewriteCond %{REQUEST_URI} ^(.+)\~q$
RewriteRule ^(.*) generate_qr.php?url=$1 [L]
RewriteCond %{REQUEST_URI} ^(.+)\~p$
RewriteRule ^(.*) preview_url.php?url=$1 [L]
RewriteCond %{REQUEST_URI} !^(.+)\.html$
RewriteCond %{REQUEST_URI} !^(.+)\.htm$
RewriteCond %{REQUEST_URI} !^(.+)\.php$
RewriteCond %{REQUEST_URI} !^(.+)\.js$
RewriteCond %{REQUEST_URI} !^(.+)\.css$
RewriteCond %{REQUEST_URI} !^(.+)\.jpg$
RewriteCond %{REQUEST_URI} !^(.+)\.png$
RewriteCond %{REQUEST_URI} !^(.+)\.gif$
RewriteCond %{REQUEST_URI} !^(.+)\.swf$
RewriteCond %{REQUEST_URI} !^(.+)\.xml$
RewriteCond %{REQUEST_URI} !^(.+)\.ico$
RewriteCond %{REQUEST_URI} !^(.+)\.txt$
RewriteCond %{REQUEST_URI} !^index\.html$
RewriteCond %{REQUEST_URI} !^index\.php$
RewriteCond %{REQUEST_URI} !^/$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_URI} !^(.+)/$
RewriteRule ^(.*) url_redirector.php?url=$1 [L]
RewriteRule ^(.*).html$ $1.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^.]+)$ $1.html [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
Any ideas how can i do that? I've tried a lot of answers that I found but it's not working out for me.
You can refactor your rules to reduce lot of redundancy and have 2 additional rules for hiding .php and .html extensions:
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/install -d
RewriteRule !^install/ /install/ [L,NC,R=302]
RewriteRule ^(.+(?:!|\~s))$ stats.php?url=$1 [L,QSA]
RewriteRule ^(.+\~[pq])$ preview_url.php?url=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.+?)/?$ $1.html [L]
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.+?)/?$ $1.php [L]
RewriteCond %{REQUEST_URI} !\.(php|js|css|jpe?g|png|gif|swf|ico|xml|txt|html?)$ [NC]
RewriteCond %{REQUEST_URI} !^/index\.(php|html)$ [NC]
RewriteCond %{REQUEST_URI} !^/$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* url_redirector.php?url=$0 [L,QSA]
Removing Extensions
To remove the .php extension from a PHP file you have to add the following code inside the .htaccess file:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
If you want to remove the .html extension from a html file
RewriteRule ^([^\.]+)$ $1.html [NC,L]
To remove .html
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
Updated
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^.]+)$ $1.html [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

Rule for "/username" in HTACCESS

I want to implement a RewriteRule in my .htaccess to enable the following URL structure:
http://example.com/([a-zA-Z\.]*) -> user.php?username=$1
I tried it like this:
RewriteRule ^([a-zA-Z\.]*)$ user.php?username=$1 [L,QSA]
If I go to localhost/victorbarbu, it will redirect to user.php?username=victorbarbu, but if I go to storage/, it will still go to user.php. What can I do to avoid this type of redirection?
This is my current .htaccess:
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php
RewriteRule (.*)\.php$ /$1/ [L,R=301,NE]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule .*[^/]$ $0/ [L,R=301,NE]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ $1.php [L]
RewriteCond %{THE_REQUEST} \ /+subdir/
RewriteRule ^ - [L]
Try this:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php !-f
RewriteRule ^([a-zA-Z.]*)$ user.php?username=$1 [L,QSA]

Use Two rules for Htaccess

This line is working
RewriteRule ^(.*)/(.*)?$ site/$1/pagina.php?pagina=$2 [L]
Now I'm trying to make when accessing the link /inicio go to the index.php page.
RewriteRule ^inicio/(.*)?$ site/$1/index.php [L]
Thereby
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^site/
RewriteRule ^inicio/(.*)?$ site/$1/index.php [NC,L]
RewriteRule ^(.*)/(.*)?$ site/$1/pagina.php?pagina=$2 [L]
.
.
.
.
Current code, with the help of friend #anubhava
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_URI} ^/site/ [NC]
RewriteRule ^ - [L]
RewriteRule ^([^/]+)/inicio?$ site/$1/index.php [NC,L,QSA]
RewriteRule ^([^/]+)/noticia/([^/]+)/?$ site/$1/pagina.php?pagina=pag_noticiasVer.php&id=$2 [L,QSA]
RewriteRule ^([^/]+)/([^/]+)/?$ site/$1/pagina.php?pagina=$2 [L,QSA]
Have it this way:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_URI} ^/site/ [NC]
RewriteRule ^ - [L]
RewriteRule ^inicio/([^/]+)/?$ site/$1/index.php [NC,L,QSA]
RewriteRule ^([^/]+)/([^/]+)/?$ site/$1/pagina.php?pagina=$2 [L,QSA]
RewriteCond are only applicable for next RewriteRule.

Categories