• wordpress与discuz的Rewrite共存

    自从使用了CPH的LAMP服务器之后,我就开始在上面试验一些php+mysql应用,其中首先弄的就是discuz了。

    安装了discuz6.0.0之后,基本上运行正常,但是一个最重要的功能urlrewrite一直搞不定,直到今天在本地弄xampp才无意之中发现了问题所在。

    和wordpress不一样,当你在discuz后台选择使用url静态化之后,并不会自动生成相应的.htaccess文件,而是指导你"相应规则请参考《用户使用说明书》的高级使用部分"。
    google一下知道这个Discuz! 用户使用说明书,然后找到高级应用里面的url静态化:http://www.discuz.net/usersguide/advanced_urlrewrite.htm

    按照discuz所说的,对于Apache Web Server(虚拟主机用户),应该进行如下操作:

    检查论坛所在目录中是否存在 .htaccess 文件,如果不存在,请手工建立此文件。Win32 系统下,无法直接建立 .htaccess 文件,您可以从其他系统中拷贝一份,或者在 Discuz.net 技术支持栏目中下载此文件。编辑并修改 .htaccess 文件,添加以下内容

    # 将 RewriteEngine 模式打开
    RewriteEngine On
    # 修改以下语句中的 /discuz 为你的论坛目录地址,如果程序放在根目录中,请将 /discuz 修改为 /
    RewriteBase /discuz
    # Rewrite 系统规则请勿修改
    RewriteRule ^archiver/((fid|tid)-[w-]+.html)$ archiver/index.php?$1
    RewriteRule ^forum-([0-9]+)-([0-9]+).html$ forumdisplay.php?fid=$1&page=$2
    RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+).html$ viewthread.php?tid=$1&extra=page%3D$3&page=$2
    RewriteRule ^space-(username|uid)-(.+).html$ space.php?$1=$2
    RewriteRule ^tag-(.+).html$ tag.php?name=$1

    添加内容时,请遵照上面的提示,修改论坛所在的路径,然后保存。将 .htaccess 文件上传到论坛所在的目录中。然后进入论坛系统设置的搜索引擎优化,根据需要开启 URL 静态化功能。

    我这样做了之后不但没有效果,而且连论坛都访问不了,提示HTTP500错误。

    今天在本地安装了xampp之后,装了discuz,重新按照上面的方法测试,还是不行,然后又安装了wordpress并成功使用了urlrewrite。
    打开wordpress自动生成的.htaccess文件和discuz的来比较,终于看出来问题:
    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /wordpress/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /wordpress/index.php [L]
    </IfModule>
    # END WordPress

    很明显,discuz官方的资料少了两行:
    <IfModule mod_rewrite.c>
    </IfModule>

    按照wordpress的加上去,在本地和CPH服务器上都成功了。
    我对.htaccess文件不是很懂,完全是自己尝试出来的,补充几点:
    首先是<IfModule mod_rewrite.c></IfModule>不能少,这大概是判断mod_rewrite是否存在的。
    其次是RewriteEngine On这个应该是Rewrite引擎打开,也不能少。
    然后是RewriteBase /这个很重要,如果安装在根目录就保持这样,如果不是,就要把/替换成所在的目录,相对于web根目录。
    例如你把discuz安装在http://127.0.0.1/bbs,那么就要写成RewriteBase /bbs/才可以,这样也方便了多个rewrite共存。
    最后是.htaccess文件的位置,如果你的根目录下有bbs和wordpress两个目录对应http://127.0.0.1/bbshttp://127.0.0.1/wordpress,那么可以分别创建两个.htaccess文件放在这两个目录里。
    例如我是这样的:
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /wordpress/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /wordpress/index.php [L]
    </IfModule>

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /bbs/
    RewriteRule ^archiver/((fid|tid)-[w-]+.html)$ archiver/index.php?$1
    RewriteRule ^forum-([0-9]+)-([0-9]+).html$ forumdisplay.php?fid=$1&page=$2
    RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+).html$ viewthread.php?tid=$1&extra=page%3D$3&page=$2
    RewriteRule ^space-(username|uid)-(.+).html$ space.php?$1=$2
    RewriteRule ^tag-(.+).html$ tag.php?name=$1
    </IfModule>

    注意加粗部分哦。

    分类: 所谓技术 | 标签: ,,,