htaccess 帮助共存的 Codeigniter 和 Wordpress 安装

Posted

技术标签:

【中文标题】htaccess 帮助共存的 Codeigniter 和 Wordpress 安装【英文标题】:htaccess help in coexisting Codeigniter and Wordpress install 【发布时间】:2012-01-06 00:30:49 【问题描述】:

我的目的是在同一域下创建一个带有博客的 codeigniter 应用程序。两者的管理员应该是分开的。

目录结构是这样的:

httpdocs/.htaccess
httpdocs/application/ <== CI installation
httpdocs/blog/        <== WP installation
httpdocs/blog/.htaccess

网址应该是这样的:

mysite.com         <== CI
mysite.com/tools   <== CI
mysite.com/forum   <== CI
mysite.com/blog    <== WP

我按照this tutorial 进行设置,效果很好。

我的 codeigniter 应用程序和 WP博客主页 完全按照应有的方式显示,并带有正确的 URL、样式等。

我也可以正常访问 mysite.com/blog/wp-admin 以获取 WP 后端内容。

我的问题是当我尝试访问实际的博客文章时,例如:

mysite.com/blog/fiction/what-is-going-on/

当我这样做时,我得到 Codeigniter 的 404 错误页面

我的根 .htaccess (httpdocs/.htaccess) 是这样的:

RewriteEngine On
RewriteBase /

RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d

RewriteCond $1 !^(index\.php|robots\.txt|blog|assets)
RewriteRule ^(.*)$ index.php/$1 [L]

我的博客 .htaccess (httpdocs/blog/.htaccess) 是这样的:

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

知道我做错了什么吗?如果需要,将发布更多信息。提前致谢。

【问题讨论】:

【参考方案1】:

好的解决方案是使用

CI .htaccess

RewriteEngine On
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]

WP .htaccess

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

成功了。现在所有页面都显示没有问题。

【讨论】:

【参考方案2】:

我一般在CI.htaccess上使用2组条件(一组在根文件夹)

RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^blog/(.*)$ blog/index.php [L]

RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php/$1 [L]

这将允许首先处理博客 URL,然后再处理 CI URL。您需要注意不要在您的应用程序中使用术语 blog 的任何控制器或路由。

【讨论】:

thx @dakdad 但它不起作用 - 我仍然得到 CI 的 404 博客文章页面 - 关于如何解决这个问题的任何其他想法? @dakdad 在我们为用户运行博客时,如果您需要在控制器中使用“博客”怎么办? @Stefan 相同的 uri 不能提供两件事,其中一件需要不同。 @sakdad 这难道不是 Htaccess 重写规则并检测主机是博客而不是子域或自定义域上的用户博客吗?【参考方案3】:

我会在你的 Wordpress .htaccess 中尝试三件事(不要碰 CI ——它看起来是正确的):

首先,尝试删除 index.php 之前的正斜杠:

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

如果这不起作用,那么请尝试将 RewriteBase 设置为 /blog/:

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

最后,如果这些都不起作用,您可以尝试在最后的 index.php 行中手动添加“/blog/”:

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

【讨论】:

有什么理由使用您的代码而不是我上面的答案?我的似乎工作正常,但我想知道您是否对我如何将它组合在一起有任何意见,以及您的解决方案是否有任何优势

以上是关于htaccess 帮助共存的 Codeigniter 和 Wordpress 安装的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess 重定向 301 设置帮助问题请

需要帮助将 htaccess 规则转换为 nginx

htaccess帮助,需要强制www,https,并删除index.php

htaccess 帮助,从 URL 中删除一个字符串

需要 .htaccess 帮助:不存在的 url 301 重定向到 404,而不是直接给出 404

.htaccess 重写 url 帮助使用 GET 变量指向 URL 中的值 [关闭]