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

http://example.com/wp-admin/admin.php?page=whatever&id=5&var=10

to

http://example.com/wp-admin/whatever?id=5&var=10

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=(.*)$
RewriteCond %{ENV:REDIRECT_CLEAN_CONTACT_URL} !1
RewriteRule ^admin.php$ /wp-admin/%1?%2 [R,L]

Which changes it to:

http://example.com/wp-admin/whatever&id=5&var=10

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:

http://example.com/wp-admin/members

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)(.*)$
RewriteCond %{ENV:REDIRECT_CLEAN_CONTACT_URL} !1
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.

Leave a Reply

Your email address will not be published. Required fields are marked *