Discuz换服务器后除主页其他404错误解决办法

把英国的服务器上的Discuz站点换到日本服务器后: “The requested URL /thread-1357-1-1.html was not found on this server.”站点除了主页面可以访问,其它栏目全部访问显示为404错误页面。

造成这个问题最可能就是因为在新的服务器上的mod_rewrite模块或者是简洁链接(clean URLs)的错误配置(或称apache伪静态)。我们在地址栏中键入http://www.example.com/index.php?Q=user检测mod_rewrite模块是否正常工作,检查的方法如下:

如果在您输入上述地址后出现了登录页面,那么我们就可以假设drupal站点的php虚拟主机服务器是没问题的,只是mod_rewrite模块没有启用。来确定mod_rewrite模块是否启用,我们可以建立一个名字为phpinfo.php的文件为您网站安装环境的php探针,并在这个php文件中加入如下代码:

<?php
phpinfo();
?>

保存后,使用FTP上传到php虚拟主机上drupal站点的根目录下,然后使用您的网站域名/phpinf.php来执行,你就可以看到您空间的环境配置。

确认mod_rewrite启用

在地址栏中输入http://www.example.com/phpinfo.php查看“Loaded Module (加载模块)”中有没有包含mod_write。如果没有包含的话,也就是说明apache服务器没有加载这个模块,更别谈开启了。刚才所创建的phpinfo.php文件保留着,在下面的介绍中,我们还要使用到它。

确认.htaccess文件正常工作

在apache站点的根目录下有一个.htaccess文件,首先我们使用FTP登录到php虚拟主机的根目录下找到这个文件,下载到本地做个备份。然后再创建一个新的.htaccess文件,并在其中加入如下表达式:
DirectoryIndex phpinfo.php

保存,再使用FTP上传覆盖掉drupal站点根目录下的.htaccess文件。接着在浏览器中输入http://www.example.com(您apache站点的地址),如果跳转到phpinfo.php,那么说明您现在站点下的.htaccess文件是正常工作的。

提示:确认完后记得把备份好的.htaccess文件还原现有站点下的.htaccess文件。

细致确认rewrite_base配置

确认.htaccess文件正常工作后,那我们就来确认一下.htaccess文件中“RewriteBase”和“RewriteEngine” 的配置。(详情请查看:http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html)

成功启用.htaccess的重写功能

如果phpinfo.php没有显示的话,定位apache服务器的配置文件并且启动.htaccess的重写功能。这个文件的位置会随着服务器平台的不同而不同。比方说在Ubuntu服务器上,虚拟主机配置文件在/etc/apache2/sites-enabled/000-default 。通过.htaccess中配置mod_rewrite,apache配置需要允许最低的文件访问控制权限,为了使这个简单的目录索引测试工作,apache服务器需要允许“索引”重写。在服务器的配置文件中我们可以找到下列两行:
<Directory /filesystem/path/to/your/sites/root>

</Directory>

在这个块中间不要随意添加或编辑重写指令,会造成安全隐患。更多资料可以参考官方文献:

http://httpd.apache.org/docs/1.3/mod/core.html#allowoverride

允许所有的重写:

<Directory /filesystem/path/to/your/sites/root>
AllowOverride All
</Directory>

仅仅选择重写:

<Directory /filesystem/path/to/your/sites/root>
AllowOverride Indexes Options FileInfo
</Directory>

现在重载apache配置,这也是因平台而论的,在Ubuntu平台下,命令如下:
1    # /etc/init.d/apache2 reload

接着在浏览器中输入您网站站点的域名,php服务器的配置信息会被展示出来,如果是这样的话进行修改后就能够正常的进行访问了。当您的简洁链接(Clean URLs)不能正常工作,请从“成功启用.htaccess的重写功能”开始操作。

Discuz! X3.0/X3.1/X3.2通用 Apache伪静态规则

1.在后台“全局》SEO设置》URL 静态化”相关复选框全部勾选,点“提交”按钮。

2. 把.htaccess直接用FTP上传到论坛根目录即可,不要修改文件名,就是.htaccess
其他目录的话修改第2行“RewriteBase /discuz” 把discuz换成目录名,如在bbs目录则改为:RewriteBase /bbs  .htaccess文件放在bbs目录

RewriteEngine On
RewriteBase /discuz

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^topic-(.+)\.html$ portal.php?mod=topic&topic=$1&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^article-([0-9]+)-([0-9]+)\.html$ portal.php?mod=view&aid=$1&page=$2&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^forum-(\w+)-([0-9]+)\.html$ forum.php?mod=forumdisplay&fid=$1&page=$2&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ forum.php?mod=viewthread&tid=$1&extra=page\%3D$3&page=$2&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^group-([0-9]+)-([0-9]+)\.html$ forum.php?mod=group&fid=$1&page=$2&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^space-(username|uid)-(.+)\.html$ home.php?mod=space&$1=$2&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^blog-([0-9]+)-([0-9]+)\.html$ home.php?mod=space&uid=$1&do=blog&id=$2&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^archiver/(fid|tid)-([0-9]+)\.html$ archiver/index.php?action=$1&value=$2&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([a-z]+[a-z0-9_]*)-([a-z0-9_\-]+)\.html$ plugin.php?id=$1:$2&%1
版权声明:本文内容以盗版加工为主,原创为辅,意在分享,收藏,记录工作中的点点滴滴。不代表任何组织,不代表任何商业机构,也不代表我个人所有想法。
心晴客栈 » Discuz换服务器后除主页其他404错误解决办法

发表回复