我将先前静态的网站迁移到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错误日志中。
由于您有一个孤立的目录树,您应该能够使用静态代码的Location
或Directory
指令。 这是我使用的一个变体。
<Location /foo/bar/> Options +Indexes +FollowSymLinks +MultiViews AllowOverride None Require all granted </Location>