我的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
最合适的回答,由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安装在何处,它都更具可移植性,而且“只需工作”,无需修改(而且您可能不需要询问您的问题,因为默认文件将“只需工作”)。