2012-12-05 81 views
5

我有3台服务器,一台localhost apache服务器,一台测试远程服务器和生产服务器。Codeigniter,生产服务器上的路由不起作用

我有相同的codeigniter安装和站点设置在他们所有3和本地主机和测试服务器路由没有'index.php'工程100%。然而,在生产服务器上,无论URL如何显示只有主页(通过默认控制器),都会显示出来,除了默认的路由规则外,似乎所有的路由规则都被忽略了。

但是,如果index.php被添加到URL中,那么它会像它应该的那样工作。

例如,如果生产站点上的URL是:'www.mysite.com/information',那么加载的内容就是默认控制器。

但是当制作网站上的URL是:'www.mysite.com/index.php/information'时,加载的内容来自'信息'控制器。

这是我htacess文件的内容:http://pastebin.com/cDaZVJ8A

这是我的路由配置文件:http://pastebin.com/7Ewc2bwN

我$配置[ 'index_page']设置为无。

我真的不知道为什么它不工作,在codeigniter本身的所有服务器上的相同设置,并且mod_rewrite IS在生产服务器上工作。

我不知道该怎么做,我该如何找出有什么问题?

+0

你是否在'application/config/production'目录中检查'routes.php'是否存在?如果文件存在,它将覆盖'application/config'目录中的文件。 – Stanley

+0

@Stanley,它确实存在于生产服务器上的正确位置。 – Nicekiwi

+0

@Stanley,等什么?配置目录中没有文件夹? – Nicekiwi

回答

6

这是当人们移动笨安装从一个环境到另一个经常出现一个相当普遍的问题。我不知道它为什么会发生,可能是服务器操作系统或apache设置的差异,但解决方案通常是在您的.htaccess文件中为Index.php的RewriteRule添加一个问号?

老:

RewriteRule ^(.*)$ index.php/$1 [L] 

新:

RewriteRule ^(.*)$ index.php?/$1 [L] 
+1

我从来没有遇到过这个问题,但很高兴知道可能的解决方案 – m4t1t0

1

检查您的Apache虚拟主机配置,并确认您的目录定义中有AllowOverride All

+0

我没有访问权限,它是一个共享服务器。 – Nicekiwi

1
  1. 也许你的.htaccess文件有问题吗?

    一旦我将应用程序移动到生产服务器时出现问题,因为RewriteBase被设置为开发服务器上的某个目录。

    在我的生产服务器应用程序在web根目录下,所以RewriteBase应该是/,我在那里有/something

  2. 有一次,当我将网站从开发服务器(Windows)移动到生产(linux)时,我的上/下套有一个愚蠢的问题。

+0

我希望这很容易,你可以从问题中的链接看到我自己的htacess文件。它是正确的。 – Nicekiwi

+0

现在看看@Ezra。我添加了一个小费。 – Kamil

0

我有同样的问题。我正在使用函数将文章名称转换为URL(slugify)。

在localhost和服务器上,这个函数返回的网址略有不同。

相关问题