如何使用.htaccess从wp-admin中删除“admin.php?page=”?

时间:2014-12-15 作者:Jeff Vdovjak

我想用.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
我不介意在我的.htaccess. 不过,如果有更好的方法,我很乐意看到!

我使用内部和外部重定向,因此当您单击管理URL时,它会转到wp-admin/admin.php?page=somewhere, 它重写浏览器的URL,然后查找重写的URL。我想使用\'漂亮\'的管理链接。示例:

http://example.com/wp-admin/members
易于记忆和直观。最终,我将重命名/wp-admin/user

2 个回复
SO网友:awei

你可以试试这个(抱歉,之前没有测试过)。有关说明,请参阅内联注释:

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 所以整个querystring被归为%1 还有你的%2 为空。

SO网友:Ethan O\'Sullivan

我不太确定你的最终目标是什么,但据我所知,我的方法是这样的。在您的.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明确您的问题,希望您的预期结果是什么,我可以给您一个更具体的答案。

结束

相关推荐

.htaccess help to a beginner

我制作了一个自定义页面模板,并创建了一个设置为使用自定义页面模板的新页面。我的自定义页面URL现在是:www.domain。否/属性该网站将有3种不同类型的物业类型(办公室、商店和公寓),我希望这些URL(startpage上的3个自定义按钮)将指向同一个自定义页面:www.domain。否/物业/办公室->www.domain。否/属性www.domain。否/属性/店铺->www.domain。否/属性www.domain。否/属性/代理->www.domain。否/属性然后,我将从