将静态文件混合到WordPress中

我将先前静态的网站迁移到WordPress 4.3.1。 大多数情况下工作正常,但我有一个奇怪的情况:我需要example.com/foo/是dynamic的,但我需要example.com/foo/bar/是静态的。 我创build了一个/foo/bar/index.html来处理example.com/foo/bar/ ,但是现在example.com/foo/正在给出一个403 Forbidden代码。

我还需要example.com/foo/bar/才能显示在菜单中,我通过添加一个dynamic的example.com/foo/bar/来完成(删除这不起作用)。

example.com/foo/页面仍然存在,可以在admin中进行编辑。 为什么我得到403,我该如何解决?

发生这种情况是因为WordPress的Apache重写规则将所有内容都传递给了WordPress,这些文件或文件夹中的目录并不存在 ,这就是两个RewriteCond规则所检查的内容。 但是你在文件系统上有一个与/foo/相对应的目录,导致Apache在内部处理它。

为了解决这个问题,你需要明确地告诉Apache把它传递给WordPress(并且可以使用任何其他可能有目录从第一个重写规则中屏蔽它们的URL)。

IfModule结束之前添加新的指令段:

 RewriteCond %{REQUEST_URI} "/foo/" [OR] RewriteCond %{REQUEST_URI} "/bar/" [OR] RewriteCond %{REQUEST_URI} "/baz/" RewriteRule . /index.php [L] 

至于WordPress的菜单,你不应该添加空白页面来添加条目。 相反,只需创build自定义菜单项,并将所需的URL添加到静态页面。 点击菜单编辑器中的自定义链接,并添加所需的信息。

我不得不修改我的DirectoryIndexconfiguration。

 DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm 

这些是我的/ etc / workpresss /访问规则WordPress的混合静态内容

 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / # Content rewrites go here # Serve static content RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # Use WordPress for rest of the content RewriteRule . /index.php [L] </IfModule> 

编辑:403是一个禁止访问消息。 这可能是Apache中的ACL或者WordPress目录的权限问题。 403的原因可能logging在Apache错误日志中。

由于您有一个孤立的目录树,您应该能够使用静态代码的LocationDirectory指令。 这是我使用的一个变体。

 <Location /foo/bar/> Options +Indexes +FollowSymLinks +MultiViews AllowOverride None Require all granted </Location>