我试图阻止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保留在循环中?
答案 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代码可以很好地工作。