将静态文件混合到 WordPress 中

将静态文件混合到 WordPress 中

我正在将以前的静态网站迁移到 WordPress 4.3.1。大多数事情都运行良好,但我有一个奇怪的情况:我需要example.com/foo/动态,但我需要example.com/foo/bar/静态。我创建了一个/foo/bar/index.html来处理example.com/foo/bar/,但现在example.com/foo/给出了 403 Forbidden 代码。

我还需要example.com/foo/bar/出现在菜单中,我已经通过添加动态实现了example.com/foo/bar/这一点(删除它没有帮助)。

example.com/foo/页面仍然存在,可以在管理员中编辑。为什么我得到 403 错误,我该如何修复它?

答案1

发生这种情况的原因是 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 菜单,您不应添加空白页来向其中添加条目。相反,只需使用指向静态页面的所需 URL 创建自定义菜单条目即可。单击菜单编辑器中的自定义链接并添加所需信息。

答案2

我必须修改我的 DirectoryIndex 配置。

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

这些是我的针对混合静态内容的 WordPress 的 /etc/workpresss/access 规则

<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 的原因可能会记录在 Apache 错误日志中。

由于您有一个独立的目录树,因此您应该能够对静态代码使用Location或指令。这是我使用的变体。Directory

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

相关内容