I have a WordPress blog and I want to add some custom page in it and remove the .php
extension and querystring from urls.
All WordPress page urls are like index.php?pagename=
, so if I tried add RewriteRule ^(.*)$ $1.php
in the .htaccess
file, the other pages return 500 internal server error
. How can I remove the php extension from everything except index.php
and login.php
?
Here is my existing .htaccess
file:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# RewriteRule ^(.*)$ $1.php # add this line will broken the wordpress rewrite rule
</IfModule>
# END WordPress
If you want add, for example, few custom php pages, you should add your own rewrites before standard Wordpress part, but after RewriteBase /
.
Here I have added a couple of rewrites able to handle custom pages stored inside in a private directory custom
.
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# *** START CUSTOM PART ***
RewriteRule ^page1$ /custom/page1.php [L,QSA]
RewriteRule ^page2$ /custom/page2.php [L,QSA]
# *** END CUSTOM PART ***
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
If your site is available on http://www.example.com
, your custom pages will be accessible using http://www.example.com/page1
, http://www.example.com/page2
and so on...
Just few words regarding rewrite flags [L,QSA]
:
L
- If rewrite match, stop the rewriting process immediately and don't apply any more rules.QSA
- Appends any query string from the original request URL to custom pages. It means that calling http://www.example.com/page1?foo=bar&c=1
will be rewrited internally into /custom/page1.php?foo=bar&c=1
Please note:
Permalink Settings
. I have just added the custom part.Permalink Settings
, your .htaccess
will be overwritten, better if you change .htaccess
permission making the file readonly. And, in any case, save a copy of your .htaccess configuration.On the other hand if you only want your Wordpress having URLs more SEO friendly, i.e. URLs without .php
pages and without the full query strings but only the post/page slug as unique identifier, you may access to Wordpress Permalink Settings
and select Post name
or the option you prefer:
When you activate Permalink Settings
, Apache httpd work is limited to the .htaccess part. This means that Apache redirects everything (request header and body) via .htaccess to the index.php page and Wordpress implements internally every rewrite.
In case you want more suggestions related to Wordpress configuration, I'll suggest to write your questions in https://wordpress.stackexchange.com/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With