我尝试将所有的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,图像和任何其他静态资源仍然得到正确的服务。)
让我们看看你的规则在做什么。
您启用重写引擎设置每个目录重写的基本URL。 没关系。
RewriteEngine On RewriteBase /
然后,你声明不应该为/index.php做任何的/index.php 。 没关系。
RewriteRule ^index\.php$ - [L]
其余条件导致最后一行中的规则被应用。
每当文件或目录不存在或请求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 。