将所有urlredirect到/ wp-admin和wp-json之外的根目录

我尝试将所有的urlredirect到除了wordpresspipe理和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> 

这是完美的工作,所有的redirect期望的/wp-json路线,我得到404错误。

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

你能帮我么 ? 非常感谢 ! 🙂

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

您应该保持原来的WP指令,但是在文件的开始处实施额外的redirect。 例如:

 # 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> 

请注意,与原始代码一样,请求只在请求不存在的文件时被redirect,即使该文件位于/wp-admin/wp-json URL空间之外。 (据推测,这是必需的,以便CSS,JS,图像和任何其他静态资源仍然得到正确的服务。)

让我们看看你的规则在做什么。

  1. 您启用重写引擎设置每个目录重写的基本URL。 没关系。

     RewriteEngine On RewriteBase / 
  2. 然后,你声明不应该为/index.php做任何的/index.php 。 没关系。

     RewriteRule ^index\.php$ - [L] 
  3. 其余条件导致最后一行中的规则被应用。

    每当文件或目录不存在或请求URL不是/wp-admin.*/wp-json.*时,redirect到/就完成了:

     RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !^/wp-admin.* RewriteCond %{REQUEST_URI} !^/wp-json.* RewriteRule ^.*$ / [L,R=301] 

这些没有任何错误。 urlhttp://example.com/wp-json/和下面的任何内容都不符合最后的条件,而不适用RewriteRule

404 Not Found错误是指示你根本没有/wp-json 。 日志中的(人类可读的)错误提示相同。 如果你没有最后一个规则,那么不存在前两个文件的规则就会被满足,导致redirect到/ 。 有最后一个规则阻止这个redirect,导致404