将除 /wp-admin 和 wp-json 之外的所有 url 重定向到根目录

Que*_*sse 6 mod-rewrite .htaccess redirect wordpress apache2

我尝试将所有 url 重定向到根目录,除了 wordpress 管理和 wordpress REST API。

我有这些规则.htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/wp-admin.*
RewriteCond %{REQUEST_URI} !^/wp-json.*
RewriteRule ^.*$ / [L,R=301]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

它适用于所有重定向,除了/wp-json我收到 404 错误的路线。

另外,我的 apache 日志文件中有这些错误类型: File does not exist: [...]/dmjob/wp-json, referer: http://dmjob.dev:8888/

你能帮我么 ?非常感谢 !:)

MrW*_*ite 6

您似乎已经破坏了WordPress 前端控制器,因此任何对/wp-admin和 的请求/wp-json都不会被正确路由(因此您会看到 404)。

您应该保留 WP 指令原样,但在文件开头实施额外的重定向。例如:

# Redirect all requests for non-existent files and those not for wp-admin or wp-json
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/wp-admin
RewriteCond %{REQUEST_URI} !^/wp-json
RewriteRule ^ / [R=301,L]

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

请注意,与您的原始代码一样,仅当请求不存在的文件时才会重定向请求,即使该文件位于 和/wp-adminURL/wp-json空间之外。(大概这是必需的,这样 CSS、JS、图像和任何其他静态资源仍然可以正确提供服务。)