.htaccess - 如何从网址隐藏.php?

I'm looking for a way to clean up my site's urls, like removing .php or .html when there is a file name in the url. Also if it's possible to easily hide GET extensions that would be nice too, but the .php is the main goal.

From other articles and SO questions I have this code in the .htaccess file in the main directory of a website:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

The first part redirect to https, if someone types the url with http. That part work fine. The second 3 lines should use a url without the .php extension on files. For example https://www.fixitconnect.com/users.php should be https://fixitconnect.com/users

I don't know how this syntax works so i was just copying other answers. Looks like it sets some conditions (if there is .php in the current file's name), then a rule (use a url without the .php) to be applied if those conditions are met. But i'm probably not doing it right.

Thanks :)

Try the folowing code :

DirectorySlash Off 
RewriteEngine on
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)  /$1.html [L] 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)  /$1.php [L]
RewriteCond %{THE_REQUEST} \s/+(.*?/)?(?:index)?(.*?)\.(html|php)[\s?/] [NC] 
RewriteRule ^(.*)  /%1%2 [R=302,L]
RewriteCond %{REQUEST_URI} !(/$|\.) [NC]
RewriteRule ^  %{REQUEST_URI}/ [R=302,L] 

The above code will remove both html & php extensions then give priority to check that name without extensions to files first then folders .

So , if you have file and folder with same name the priority will be for files when they comes without extensions .

NOTE: if you have two files with same names and diffrent extentions the priority will be for .html and if you wanna to be for .php let fifth & sixth lines be in third & forth lines .

The last line to slash directory again when they come without slash .

If it is ok , change 302 to 301 to get permanent redirection.

The below htaccess modification will allow you access a path without having the .php at the end

 <IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
</IfModule>

hence the url https://www.fixitconnect.com/users.php can be accessed with https://www.fixitconnect.com/users. Although the url https://www.fixitconnect.com/users.php can still be accessed directly as long as it actually exists

Using the below code, you can rewrite all requests to index.php Basically index.php is the php file that will handle all url requests.

RewriteEngine on


RewriteCond %{REQUEST_URI} !^/index.php$
RewriteRule ^(.+)$ /index.php?url=$1 [NC,L]

Also check this link