从Wordpress隐藏一些目录而不破坏Wordpress 404消息

时间:2013-02-23 18:17:43

标签: wordpress .htaccess mod-rewrite

我试图阻止Wordpress搞乱/example/example2,因为我有一些高级的东西(例如密码保护),Wordpress正在打破并且错误地给出了404消息。

这是我的.htaccess:

DirectoryIndex index.html index.php parking-page.html

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_URI} !^/(example|example/.*|example2|example2/.*).*$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ./ /index.php [L]
</IfModule>

# END WordPress

这可以阻止Wordpress从这些文件夹,但现在Wordpress将不再捕获坏URL,除非他们有/。 例如,Wordpress将抓住:

mydomain.com/something/
mydomain.com/something/anything
mydomain.com/something/anything.html

但它不会抓住

mydomain.com/something
mydomain.com/something.html

(即使mydomain.com/something是一个有效的WP页面,如果我在那里没有%{REQUEST_URI}行,它通常会起作用)

后一种类型的URL被赋予服务器404消息。除了这两个目录之外,我怎样才能将WordPress保留在循环中?

1 个答案:

答案 0 :(得分:0)

我发现了解决方案(hat-tip)。这是与this question完全相同的问题,除了他的问题是有问题的目录是使用WebDAV,我的问题是该目录正在使用密码保护。

本质上,默认的WordPress规则应该按原样运行 - 但是当文件夹受密码保护时它们就会中断。应将其作为文件(-f)或目录(-d)捕获的规则失败:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

它没有将我的密码保护目录作为文件或目录捕获,因为它卡在密码提示符下 - 我没有任何错误页面将其发送到。因此,解决方案是设置错误处理:

ErrorDocument 401 /err.txt
ErrorDocument 403 /err.txt

将这两行放在所有WordPress内容之上并创建/err.txt。这样它就可以落在文件上,默认的WP代码可以很好地工作。