无法访问非WordPress子目录,因为WordPress会以404错误覆盖它们


34

我指的是以前问过但未适当回答的问题: WordPress覆盖了实际的子目录 ,还有 非“ Wordpress”页面/代码出现404错误

我遇到了同样的问题,并且尝试了几乎所有在网上找到的内容。这肯定与在wordpress中启用永久链接有关。但是,我在子目录中放了一个新的.htaccess文件,其内容如下:

RewriteEngine关闭

而且问题仍然存在。即使我完全删除了wordpress .htaccess文件,问题仍然存在。

我还尝试了其他一些建议的解决方案,例如ErrorDocument 401“未经授权的访问”和ErrorDocument 404“未经授权的访问”以及Redirect 301 / mysubdirectory http://www.mydomain.com/mysubdirectory/index.html 在所有位置均无济于事。

有人可以提供其他解决方案吗?我可以解决的唯一方法是关闭永久链接,但我们需要将其打开。

谢谢,

妮可


如果将WordPress根文件夹中的index.php重命名为index.bak会发生什么?目录仍然无法访问吗?
Horttcore

您是否尝试过在子文件夹.htaccess中重新定义基本URL(使用此子文件夹获取值)?
塞德里克ģ

Answers:


28

我假设您将WordPress放在站点根目录中,而外部目录也位于站点根目录中。发生这种情况的原因是.htaccess文件遵循层次结构。顶级.htaccess文件中的所有指令均会向下传输并应用于其下的所有目录。

在这种情况下,您可以执行以下操作之一:

  1. 将您的WordPress移到其自己的目录中。请参阅:http : //codex.wordpress.org/Moving_WordPress 如果将WordPress移到其自己的目录中,以便它在服务器目录层次结构中与其他目录处于同一级别,则WordPress重写规则不会影响其他目录。

  2. RewriteEngine Off-这通常可以工作。如果不起作用,请检查您是否未使用通配符DNS设置。如果您的DNS设置中有通配符*主机名记录指向您的Web服务器,则可能导致.htaccess和子域损坏。

  3. 在网站根目录的.htaccess文件中,在WordPress .htaccess指令上方添加以下内容:

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_URI} ^/subdirectoryname1/(.*)$ [OR]
    RewriteCond %{REQUEST_URI} ^/subdirectoryname2/(.*)$ [OR]
    RewriteRule ^.*$ - [L]
    </IfModule>

其中之一应该为您工作。


17

过去,在类似情况下,这对我有用:

放在上面 .htaccess

ErrorDocument 401 default

2
谢谢!我已经尝试了很多事情,但这是唯一适用于我的情况的解决方案:受密码保护的子目录
Rado 2013年

2
同样为我工作,关于它做什么以及为什么起作用的任何解释?
Asaf

这对我有用..不是使用wordpress,而是使用OpenCart并遇到相同的问题。一个解释真的很有帮助。
billynoah

4

当我将文件复制到同一服务器但具有不同的子目录文件夹时,因此当我尝试访问我的页面时,index.php可以正常工作,但其他页面却没有,并给我404错误。对不起,我的英语不好!!

我只是看我的htaccess原件:

#开始WordPress

RewriteEngine开
RewriteBase /
RewriteCond%{REQUEST_FILENAME}!-f
RewriteCond%{REQUEST_FILENAME}!-d
RewriteRule。/index.php [L]

#结束WordPress

并把新的

#开始WordPress

RewriteEngine开
RewriteBase /子目录文件夹
RewriteCond%{REQUEST_FILENAME}!-f
RewriteCond%{REQUEST_FILENAME}!-d
RewriteRule。/subdirectoryfolder/index.php [L]

#结束WordPress

嗨@lizette。欢迎来到WPSE论坛。您可能想在这里查看格式化的工作方式
Pothi Kalimuthu 2012年

4

我看到此线程已有几个月的历史了,但以防万一您无法使其正常工作!

我有一个类似的问题,但是我的问题是,wordpress安装位于子目录中,这阻止了URL访问根目录(WP安装目录之外)中的文件夹,但是仅当启用了永久链接时。为了解决这个问题,我从WP安装所在的子目录中复制了index.php和.htaccess(不可移动),并将它们都放置在根public_html(或您尝试在WP安装之外访问的任何子目录)中目录)。.htaccess文件已经具有永久链接的重写条件:

RewriteEngine On
RewriteBase /subdirectoryinstallfolder/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

启用永久链接进行刷新,它解决了所有问题。确保您对根文件夹的权限也设置正确,因为这过去曾给我造成问题。


3

如果仍然在禁用htaccess的情况下获得404,并且已经验证了路径并且知道文件在那里,那么剩下的唯一选择就是这三个...

选项...

  1. 服务器很有可能正在运行区分大小写的操作系统。这意味着,如果您在输入路径时未使用确切的字符和大小写,则根本无法使用。
  2. 权限:您可能对文件或文件夹或父文件夹具有错误的权限。尝试将文件,文件夹和父文件夹的权限更改为755。如果您具有ssh(终端)访问权限,请转到根目录并运行此“ chmod -R 755 mydir”,这将递归设置所有权限。
  3. 如果所有这些仍然有问题,那么您有服务器配置问题(可能是Apache)。您将需要与您的主机提供商联系。

如果这些都不起作用,则您需要一个新主机。


2

在几乎编辑了htaccess的头发后,我终于找到了一个适用于WordPress的解决方案。

在安装了WordPress的同一根目录上安装codeiginter脚本后,出现了此问题。

在尝试了此处列出的所有技巧之后,与新脚本关联的页面上仍然出现404错误。

我注意到WordPress htaccess覆盖了脚本的htaccess。我还注意到,同一目录中的其他WordPress安装没有此404错误。

我只是在同一服务器目录中的新WordPress安装中采用了htaccess,并将其添加到脚本所在的文件夹中。看起来是这样的:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /subdirectoryname/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /subdirectoryname/index.php [L]
</IfModule>

subdirectoryname替换为目录名,然后将此htaccess文件放在脚本所在的文件夹中。

示例:如果站点安装在此处

public_html/

并且新文件夹位于

`public_html/example`

复制上面的htaccess并将其保存在“ example”文件夹中,这应该可以工作。


1

由于遇到类似问题,我已经多次查看了这里的响应。我在子目录中有文件,当我尝试访问它们时会抛出404错误。正如Kirsten Douglas所说,所有.htaccess内容都无法纠正它,Wordpress已经完成了工作。

我的解决方案

我在检查服务器上的error_log后发现了这篇文章。我收到有关脚本错误uid的消息。我还注意到404并不是因为文件而被抛出,而是因为服务器无法提供500.html文件,即我有500错误。

原来,我已经以root用户身份创建了文件,并且需要将所有权更改为webfiles所有者。

希望这对遇到同样问题的其他人有所帮助!


0

您应该能够仅添加一条RewriteCond指令,以确保子文件夹中的请求将忽略WordPress规则。

RewriteCond %{REQUEST_URI} !^/mysubdirectory
# rest of WordPress rewrite rules

但是,您说即使没有 WordPress,.htaccess您仍然遇到问题吗?子目录的内容是.htaccess什么?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.