I'm having trouble with mod_rewrite. I have a basic PHP website, where all files have the .php extension.
What I want to happen is:
www.site.example/file
and www.site.example/file/
both serve up www.site.example/file.php
, but without showing the extension (so the URL bar shows www.site.example/file
)
and if someone types in www.site.example/file.php
, it redirects to www.site.example/file
My .htaccess
code is as follows:
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^([^/]+)/$ /$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ $1 [R=301,L]
RewriteRule ^([^/.]+)$ $1.php [L]
# Rules For file inside subfolders like
# /folder/myfile --> /folder/myfile.php
# and
# /folder/myfile/ --> /folder/myfile
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/([^/]+)/$ /$1/$2 [R=301,L]
RewriteRule ^(.+)/([^/.]+)$ $1/$2.php [L]
The first two (/file and /file/
serving file.php
) work fine, but if I type in www.site.example/file.php
, the browser redirects to:
http://www.site.example/home/siteuser/public_html/file
and gives a 404 error
The rewrite log shows the following (loglevel 2):
[08/Jan/2013:17:35:33 +0000] [www.mysite.example/sid#b970c168][rid#b9914e08/initial] (2) [perdir /home/mysite.example/public_html/] rewrite 'about-us.php' -> 'about-us'
[08/Jan/2013:17:35:33 +0000] [www.mysite.example/sid#b970c168][rid#b9914e08/initial] (2) [perdir /home/mysite.example/public_html/] explicitly forcing redirect with http://www.mysite.example/home/mysite.example/public_html/about-us
[08/Jan/2013:17:35:33 +0000] [www.mysite.example/sid#b970c168][rid#b9914e08/initial] (1) [perdir /home/mysite.example/public_html/] escaping http://www.mysite.example/home/mysite.example/public_html/about-us for redirect
[08/Jan/2013:17:35:33 +0000] [www.mysite.example/sid#b970c168][rid#b9914e08/initial] (1) [perdir /home/mysite.example/public_html/] redirect to http://www.mysite.example/home/mysite.example/public_html/about-us [REDIRECT/301]
[08/Jan/2013:17:35:33 +0000] [www.mysite.example/sid#b970c168][rid#b9914e08/initial] (2) [perdir /home/mysite.example/public_html/] rewrite 'home/mysite.example/public_html/about-us' -> 'home/mysite.example/public_html/about-us.php'
[08/Jan/2013:17:35:33 +0000] [www.mysite.example/sid#b970c168][rid#b9914e08/initial] (2) [perdir /home/mysite.example/public_html/] strip document_root prefix: /home/mysite.example/public_html/home/mysite.example/public_html/about-us.php -> /home/mysite.example/public_html/about-us.php
[08/Jan/2013:17:35:33 +0000] [www.mysite.example/sid#b970c168][rid#b9914e08/initial] (1) [perdir /home/mysite.example/public_html/] internal redirect with /home/mysite.example/public_html/about-us.php [INTERNAL REDIRECT]
[08/Jan/2013:17:35:33 +0000] [www.mysite.example/sid#b970c168][rid#b991e190/initial/redir#1] (1) [perdir /home/mysite.example/public_html/] pass through /home/mysite.example/public_html/home
[08/Jan/2013:17:35:34 +0000] [www.mysite.example/sid#b970c168][rid#b9914e08/initial] (1) [perdir /home/mysite.example/public_html/] pass through /home/mysite.example/public_html/favicon.ico
How do I stop it from redirecting to the file path, and make it redirect to www.site.example/file
instead?