Apache 如何使用.htaccess将/wp admin/admin.php重写为/wp admin/something
我正在尝试配置.htaccess,以便当有人导航到路径Apache 如何使用.htaccess将/wp admin/admin.php重写为/wp admin/something,apache,.htaccess,Apache,.htaccess,我正在尝试配置.htaccess,以便当有人导航到路径/wp admin/admin.php?page=something时,浏览器中会显示路径/wp admin/something,并提供/wp admin/admin.php?page=something中的内容 如果我导航到/wp admin/admin.php?page=something,则页面服务正确。但是,/wp admin/something不提供内容,而是显示我网站中的默认404页面 My.htaccess配置: <IfM
/wp admin/admin.php?page=something
时,浏览器中会显示路径/wp admin/something
,并提供/wp admin/admin.php?page=something
中的内容
如果我导航到/wp admin/admin.php?page=something
,则页面服务正确。但是,/wp admin/something
不提供内容,而是显示我网站中的默认404页面
My.htaccess配置:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?wp-admin/?$ /wp-admin/admin.php?page=$1 [L]
RewriteBase /
ReWriteCond %{ENV:ENVIRONMENT} !^development$
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [R,L]
</IfModule>
RedirectMatch 301 ^/kundeoplysninger https://signup.kredslob.dk/kundeoplysninger
RedirectMatch 301 ^/mobilepay /
# BEGIN WordPress
# The directives (lines) between "BEGIN WordPress" and "END WordPress" are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
重新启动发动机
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^/?wp admin/?$/wp admin/admin.php?页面=$1[L]
重写基/
重写cond%{ENV:ENVIRONMENT}^发展$
重写cond%{HTTPS}=在…上
重写规则^/?(*)https://%{HTTP_HOST}/$1[R,L]
重定向匹配301^/kundeoplysningerhttps://signup.kredslob.dk/kundeoplysninger
重定向匹配301^/mobilepay/
#开始WordPress
#“开始WordPress”和“结束WordPress”之间的指令(行)为
#动态生成,只能通过WordPress过滤器修改。
#这些标记之间对指令的任何更改都将被覆盖。
重新启动发动机
重写规则。*-[E=HTTP\U授权:%{HTTP:AUTHORIZATION}]
重写基/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
#结束WordPress
当有人导航到路径/wp admin/admin.php?page=something
,浏览器中将显示路径/wp admin/something
这需要外部重定向。这对于已经独立键入(或跟随外部链接)到“旧”(page=something
)URL的用户来说是可以的,但是任何内部链接都必须更新以指向所需的规范URL,即/wp admin/something
)
在重写引擎
指令之后立即添加以下内容:
# Redirect direct requests for "/wp-admin/admin.php?page=something" to "/wp-admin/something"
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^page=([^&]+)
RewriteRule ^(wp-admin)/admin\.php$ /$1/%1 [QSD,R=301,L]
$1
反向引用包含从URL路径捕获的“wp admin”(仅保存重复),而%1
反向引用包含从查询字符串捕获的“something”(在前面的RewriteCond
指令中捕获)
从重定向响应中删除查询字符串需要QSD
标志(Apache 2.4+)
有必要检查REDIRECT\u STATUS
环境变量,以防止重写的请求(见下文)被重定向。只重定向来自客户端的直接请求
并且提供了来自/wp admin/admin.php?page=something
的内容
在上述重定向之后,我们需要立即在内部将请求从请求的/wp admin/something
重写回服务器理解的格式,即/wp admin/admin.php?page=something
在上述重定向之后添加以下内容
# Rewrite "/wp-admin/something" back to "/wp-admin/admin.php?page=something"
RewriteRule ^(wp-admin)/([^.]+)$ $1/admin.php?page=$2 [L]
捕获正则表达式
([^.]+)
排除了点,因此它自然避免了形式为admin.php
的匹配请求,从而防止了重写循环。另一种选择是避免重写映射到物理文件的请求,但文件系统检查相对昂贵,因此最好尽可能避免进行检查。“当前,当我导航到任一端点时,都不会发生任何情况。”-您需要解决为什么/wp admin/admin.php?page=something
无法正常工作-这似乎与您的.htaccess
文件无关。(?)我更新了我原来的问题。/wp admin/admin.php?page=something
端点工作正常,它是预期的一个不正常的端点。感谢您花时间编写一个全面的回复。我真的很感激!它很有魅力,解释得很好++