I'm looking to use .htaccess to rewrite admin page URLs. I'd like to change it from:




Right now I have:

RewriteEngine On

RewriteRule ^members$ admin.php?page=members& [L,E=CLEAN_CONTACT_URL:1,QSA]
RewriteRule ^add-members$ admin.php?page=add-members [L,E=CLEAN_CONTACT_URL:1,QSA]
RewriteRule ^delete$ admin.php?page=delete& [L,E=CLEAN_CONTACT_URL:1,QSA]

RewriteCond %{QUERY_STRING} ^page=(.*)$
RewriteRule ^admin.php$ /wp-admin/%1?%2 [R,L]

Which changes it to:


I don't mind adding each 'section' (e.g. members / add-member / delete) to my .htaccess. Although, if there is a better way, I'd be happy to see it!

I'm using internal and external redirections, so that when you click on a admin URL and it goes to wp-admin/admin.php?page=somewhere, it rewrites the URL for the browser, and then finds the rewritten URL. I would like to use 'pretty' admin links. Example:


Is easy to remember and intuitive. Eventually, I will rename /wp-admin to /user as well.

2 Answers 2


You can try this (sorry, not previously tested). See comments inline for explanation:

RewriteEngine On

## if any string separated by | is matched, it will append to ?page=
RewriteRule ^(members|add-members|delete)$ admin.php?page=%1 [L,E=CLEAN_CONTACT_URL:1,QSA]

## If querystring starts with page= and is followed by any string separated by |
## put that in the first group. Then put any other characters in second group
RewriteCond %{QUERY_STRING} ^page=(members|add-members|delete)(.*)$
RewriteRule ^admin.php$ /wp-admin/%1?%2 [R,L]

You can probably rewrite the rule to be more generic. The main issue you're having with:

RewriteCond %{QUERY_STRING} ^page=(.*)$

is that the (.*)$ matches ALL characters including your subsequent &foo=bar so the entire querystring is lumped into %1 and your %2 is empty.


Not really sure on what you want your end goal to look like, but from I understand, here's my approach. In your .htaccess add the following rule in between the <IfModule mod_rewrite.c> tag:

RewriteCond %{QUERY_STRING} (^|&)page=(.*)
RewriteRule ^wp-admin/admin.php(.*)$  wp-admin [R=301,L]]

Based off of the default .htaccess generated by WordPress, it should now look like the following with your custom RewriteRule:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# Custom Rules
RewriteCond %{QUERY_STRING} (^|&)page=(.*)
RewriteRule ^wp-admin/admin.php(.*)$  wp-admin [R=301,L]

This will then redirect pages such as:




If you could clarify your question specifically on what you want your expected results to be based on some example URLs, I could give you a more concrete answer.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.