0

所以我对.htaccess 文件和codeigniter 有一个奇怪的问题。我的本地机器上有一个 wamp 服务器,它可以按预期工作。我有像 wamp/www/my_app 这样的文件夹,在 my_app 文件夹中我有这样的 .htaccess 文件:

ErrorDocument 404 /index.php
<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteBase /my_app/
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
   ErrorDocument 404 /index.php
</IfModule>  

在我的 config.php gile 我有:

 $config['base_url']='';
 $config['index_page']='';
 $config['uri_protocol']='AUTO';

所以我尝试通过apps.myserver.com/my_app之类的链接将该项目上传到debian服务器。我将我的应用程序放入文件夹 var/www/my_app。但诀窍是它不起作用。

我尝试将 uri_protocol 更改为所有 5 个选项,但没有更改。我还尝试将 .htaccess 文件放入 var/www 而不是 var/www/my_app 但也没有任何变化。

当我尝试访问没有 index.php 前缀的控制器时,我不断收到那个愚蠢的 404 Not Found 错误。

有任何想法吗?

编辑:我检查了服务器上的 phpinfo,发现 mod_rewrite 在加载的模块中。

4

1 回答 1

0

mod_rewrite 模块可以有几个不同的扩展。您的 Debian 服务器可能会mod_rewrite.so使用mod_rewrite.c.

也就是说,如果您知道 mod_rewrite 已启用,并且您的应用程序没有广泛分布并且需要检查它,您可以安全地消除if检查。

您提到注释掉除第 3 行和第 7 行之外的所有内容——您注释掉了RewriteBase定义,这破坏了一些东西。

尝试一些简单的事情,然后从那里开始工作:

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

此外,如果 .htaccess 很奇怪,您可以做的一种变体是将之后的所有内容更改index.php为查询字符串。注意?这里:

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

您可能会也可能不会更改uri_protocolCodeIgniter 中的配置设置。我的猜测是你特别不会,但它是其他有 .htaccess 问题的人的信息。

于 2013-07-10T07:53:21.487 回答