Как удалить «admin.php? Page =» из wp-admin с помощью .htaccess?

Я ищу использовать .htaccess чтобы переписать URL-адреса страницы администратора. Я хотел бы изменить его:

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

в

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

Прямо сейчас у меня есть:

 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] 

Что изменит его:

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

Я не возражаю добавить каждый раздел (например, members / add-member / delete) в мой .htaccess . Хотя, если есть лучший способ, я был бы счастлив увидеть это!

Я использую внутренние и внешние перенаправления, так что, когда вы нажимаете на URL-адрес администратора, и он переходит на wp-admin/admin.php?page=somewhere , он перезаписывает URL-адрес браузера, а затем находит переписанный URL-адрес. Я бы хотел использовать «красивые» админ-ссылки. Пример:

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

Легко запомнить и интуитивно. В конце концов, я переименую /wp-admin в /user .

Solutions Collecting From Web of "Как удалить «admin.php? Page =» из wp-admin с помощью .htaccess?"

Вы можете попробовать это (извините, ранее не тестировалось). См. Комментарии для пояснения:

 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] 

Вероятно, вы можете переписать правило более общим. Основная проблема, с которой вы сталкиваетесь:

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

заключается в том, что (.*)$ соответствует всем символам, включая ваш последующий &foo=bar поэтому вся цепочка запросов группируется в %1 а ваш %2 пуст.

Не совсем уверен в том, на что вы хотите, чтобы ваша конечная цель выглядела, но я понимаю, вот мой подход. В вашем .htaccess добавьте следующее правило между <IfModule mod_rewrite.c> :

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

Исходя из стандартного .htaccess созданного WordPress, теперь он должен выглядеть следующим образом с вашим пользовательским 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] </IfModule> 

Затем будут перенаправлены такие страницы, как:

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

в

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

Если бы вы могли конкретно разъяснить свой вопрос о том, что вы хотите, чтобы ваши ожидаемые результаты были основаны на некоторых примерах URL-адресов, я мог бы дать вам более конкретный ответ.