Remove .php and id from URL and replace with slash
Solution 1
Try this:
RewriteRule ^(.*)\/$ $1.php [NC]
Solution 2
Try this:
RewriteEngine on
RewriteRule ^(.*) $1 [L]
RewriteRule ^products/$ products.php?id=31 [L]
This code working fine for me. For more details: http://www.askapache.com/htaccess/htaccess.html
Solution 3
about the images and CSS not displaying; If your URL gets rewritten to something like products/31 keep in mind that relative links inside the html are now relative to products/ even though the php script itself sits in the root. Because the html gets interpreted by the browser and the browser thinks you are in the products/ folder. You can use absolute urls (starting with http://hostname/ or just relative to root, thus starting with /) or have them rewritten too.
Related videos on Youtube
dpluv
Updated on September 18, 2022Comments
-
dpluv over 1 year
I have tried lots of URL rewrite rules in .htaccess but I am stuck now. I have to change this URL:
products.php?id=31
to
products/31
I have used:
Options +FollowSymLinks -MultiViews # Turn mod_rewrite on RewriteEngine On RewriteBase / ## don't touch /forum URIs RewriteRule ^forums/ - [L,NC] RewriteCond %{THE_REQUEST} \s/+products(?:\.php)?\?id=([0-9]+) [NC] RewriteRule ^ products/%1? [R,L] RewriteRule ^products/([0-9]+)/?$ products.php?id=$1 [L,QSA] ## hide .php extension snippet # To externally redirect /dir/foo.php to /dir/foo RewriteCond %{THE_REQUEST} \s([^.]+)\.php [NC] RewriteRule ^ %1 [R,L] # To internally forward /dir/foo to /dir/foo.php RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.+?)/?$ $1.php [L]
Using this I get the following result:
products/31
But all images and CSS not displaying. Any ideas?
-
MrWhite over 10 yearsAre you using relative URLs to your images / CSS files?
-
Stephen Ostermiller over 10 yearsYou have lots of rewrite rules that look like they should do the same thing. Figure out which one is the one that is actually working. I suspect you only need the forum rewrite rule and this one:
RewriteRule ^products/([0-9]+)/?$ products.php?id=$1 [L,QSA]
The duplicate rules should be removed so you can understand what is happening.
-