How to 301 Redirect /page.php to /page, after a RewriteRule has already made /page.php accessible by /page (Getting errors)
-
A site has its URLs with php extensions, like this: example.com/page.php
I used the following rewrite to remove the extension so that the page can now be accessed from example.com/page
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [L]It works great. I can access it via the example.com/page URL.
However, the problem is the page can still be accessed from example.com/page.php. Because I have external links going to the page, I want to 301 redirect example.com/page.php to example.com/page. I've tried this a couple of ways but I get redirect loops or 500 internal server errors.
Is there a way to have both? Remove the extension and 301 the .php to no extension?
By the way, if it matters, page.php is an actual file in the root directory (not created through another rewrite or URI routing).
I'm hoping I can do this, and not just throw a example.com/page canonical tag on the page.
Thanks!
-
Hi,
You might want to try this solution:
Redirects domain.com/file.php to domain.com/file
RewriteCond %{REQUEST_FILENAME} !-d # is not directory
RewriteCond %{REQUEST_FILENAME}.php -f # is an existing php file
RewriteCond %{REQUEST_URI} ^(.+).php$ # request URI ends with .php
RewriteRule (.*).php$ /$1 [R=301,L] # redirect from file.php to fileSource: http://stackoverflow.com/questions/1992183/how-to-hide-the-html-extension-with-apache-mod-rewrite (2nd answer)
Dirk