I am rewriting my url to get rid of the .php
extension (and hopefully the get variables too as all the help I have gotten is great, but still wont work.
Here is my code:
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php[\s?] [NC]
RewriteRule ^ %1 [R=301,L]
# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+?)/?$ $1.php [NC,L]
Now when I use this code, it takes the .php out, but then the error says:
Not Found
The requested URL /index.php was not found on this server.
Meanwhile, if I take that code out, it works fine, but has the .php
extension
I use this code in .htaccess to remove .php extension and redirect .php extension pages to non .php extension pages :
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(wp-admin)($|/) - [L] # You don't want to mess with WordPress
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule .* $0.php
# browser requests PHP
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.php
RewriteRule ^/?(.*)\.php$ /$1 [L,R=301]
# check to see if the request is for a PHP file:
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^/?(.*)$ /$1.php [L]
</IfModule>
When the above code is used in .htaccess, you can access PHP pages without the extension and when a user visits a page with .php extension, he/she will be redirected to the page without the extension.
Example :
http://example.com/page.php is redirected to http://example.com/page
http://example.com/page will be the same as
http://example.com/page.php
There wouldn't be any problem when you access PHP files with extension internally :
<?
include("page.php");
?>
will work without any problem.
Place this code in /myproject/.htaccess
(not in root):
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /myproject/
## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} /([^.]+)\.php[\s?] [NC]
RewriteRule ^ %1 [R=301,L]
# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/myproject/$1.php -f [NC]
RewriteRule ^(.+?)/?$ $1.php [L]
And then test it from a new browser.