WP安装在子目录白屏中

时间:2019-02-16 作者:Ludo

我的WP从localhost移动到online,现在它显示一个空白页面(WP admin正常工作)。结构如下:sub.domain.nl/dir1/dir2/WP-install

在尝试了这些之后,我想我必须停止重定向:-删除所有插件-激活默认模板-更改功能。php-打开调试模式-使用wp config和。htaccess

codex.wordpress 这也没有多大帮助,因为像大多数关于这方面的帖子一样,它希望我将文件(如.htaccess)放在网站的根目录中。

WP安装应仅在sub.domain.com/dir1/dir2/WP-install 目录因为上面还有其他页面:sub.domain.nl/dir1/dir2 (就像“站点菜单”)。

这个.htaccess:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?sub.domain.nl$
RewriteCond %{REQUEST_URI} !^/dir1/dir2/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /dir1/dir2/$1
RewriteCond %{HTTP_HOST} ^(www.)?sub.domain.nl$
RewriteRule ^(/)?$ dir1/dir2/index.php [L] 
</IfModule>
再次尝试.htaccess (this does display the site, but all the links get duplicated 例如:https://www.sub.domain.nl/sub.domain.nl/dir1/dir2/index.php)

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /sub.domain.nl/dir1/dir2/
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /sub.domain.nl/dir1/dir2/index.php [L]
</IfModule>
# END WordPress

Update

我将RewriteBase和RewriteRule更改为:

RewriteBase /internship/avans/
RewriteRule . /internship/avans/index.php [L]
Frontpage显示正确,wp admin像以前一样工作some 页面/帖子链接有效?!?有些人会出现以下错误(也是在清除Cookie之后):

Not Found The requested URL /sub.domain.nl/dir1/dir2/index.php was not found on this server.

我删除了那些页面并重新发布了它们,它们现在运行良好。不知道这种不规范的行为会导致什么。我检查了数据库中错误的更新链接sub.domain.nl/sub.domain.nl 在phpMyadmin中,使用搜索/替换,但情况似乎并非如此。

不管怎样,它现在可以工作了,但我仍然想知道是什么原因导致一些链接工作,其中一些链接复制了双链接,因此出现了一个未找到的错误。

Update 2

我最终使用了建议的.htaccess 作者@MrWhite(下图):请阅读他的帖子,了解详情!

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

1 个回复
最合适的回答,由SO网友:MrWhite 整理而成

如果WordPress安装在目录中/dir1/dir2 以及相应的.htaccess 文件也在该子目录中,即。/dir1/dir2/.htaccess, 然后.htaccess 文件应类似于:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
#RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>
# END WordPress
这与default WordPress .htaccess file, 除非我已经注释掉(删除)了RewriteBase 指令和删除了RewriteRule <替换(即/index.php 现在是index.php). 这很重要,因为它允许Apache添加回目录前缀(.htaccess 处理结束时。

这显然意味着您的URL必须包含/dir1/dir2 目录前缀。

两者.htaccess 您发布的文件无效,因为。。。

RewriteCond %{HTTP_HOST} ^(www.)?sub.domain.nl$
RewriteCond %{REQUEST_URI} !^/dir1/dir2/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /dir1/dir2/$1
RewriteCond %{HTTP_HOST} ^(www.)?sub.domain.nl$
RewriteRule ^(/)?$ dir1/dir2/index.php [L]
这将放置在文档根目录中/.htaccess 文件的目的是隐藏/dir1/dir2 URL中的子目录。通过将其放置在/dir1/dir2/.htaccess 由于检查REQUEST_URI 服务器变量将失败RewriteRule 图案^(/)?$ 永远不会匹配。

RewriteBase /sub.domain.nl/dir1/dir2/
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /sub.domain.nl/dir1/dir2/index.php [L]
如果/sub.domain.nl 是文件系统上的一个目录(在URL空间中),但它不是;这是主机名,所以没什么意义。这允许显示首页(主页),因为第一个RewriteRule 阻止进一步处理。然而,子页面很可能会导致Apache生成404作为/sub.domain.nl/dir1/dir2/index.php 不存在。

注意,在本例中RewriteBase 指令不执行任何操作。已分配的RewriteBase 仅适用于路径替换(即非绝对和非根相对-以斜杠开始)。本例中没有相对路径替换。

<小时>

UPDATE:

我将RewriteBase和RewriteRule更改为:

RewriteBase /internship/avans/
RewriteRule . /internship/avans/index.php [L]
我的版本(顶部)的最终结果是相同的。但是RewriteBase 指令是冗余的,以这种方式对URL路径进行硬编码是多余的,并且不太便于移植。

RewriteBase /internship/avans/ 在本例中,指令是多余的(可以删除),因为您已经在RewriteRule 替换。这个RewriteBase 仅当具有相对路径替换(如上所述)以覆盖目录前缀时才使用。所以,要使用RewriteBase 在本例中,您可以这样写:

RewriteBase /internship/avans/
RewriteRule . index.php [L]
对URL路径进行硬编码自然会降低其可移植性。

您只需将RewriteBase RewriteRule <如果.htaccess 文件不在WordPress安装的应用程序根目录中。例如,如果WordPress安装在/dir1/dir2, 但是.htaccess 位于文档根目录中(以隐藏WordPress应用程序目录)。

有点旁白,但。。。出于上述原因,“默认”WordPress.htaccess 文件不正确/误导IMO:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
TheRewriteBase / 此处不使用,因为URL路径(仅/) 明确包含在RewriteRule 替代:/index.php. 你不需要两者兼而有之,这似乎会给用户带来很多困惑。事实上,如果.htaccess 文件位于应用程序根目录中(它是大多数应用程序根目录)。通过“应用程序根目录”,我指的是WordPress安装的目录,可以是文档根目录,也可以是子目录。

IMO,“默认”WordPress.htaccess 文件应该是我在答案顶部修改的文件(注释掉RewriteBase 指令并删除斜杠前缀),这就是您现在使用的。无论WordPress安装在何处,它都更具可移植性,而且“只需工作”,无需修改(而且您可能不需要询问您的问题,因为默认文件将“只需工作”)。

相关推荐

迁移后永久链接不起作用-AllowOverride All、htAccess设置

我束手无策,我把一个网站迁移到了另一台服务器上,经过多次设置,我终于在它工作的地方找到了它——有点像。永久链接已损坏,并抛出无法找到站点的错误。在httpd内部。conf I设置正确的(我认为)设置:<Directory /opt/wordpress> Options Indexes FollowSymLinks MultiViews AllowOverride All </Directory> htaccess存在,可由WP写入# BEG