有人能帮我解决这个问题吗?我感觉就像已经用头撞墙超过 2 个小时了。
我的计算机上安装了 Apache 2.2.8 + PHP 5.2.6,并且带有下面代码的 .htacces 运行正常,没有错误。
RewriteEngine on
RewriteCond $1 !^(index\.php|css|gfx|js|swf|robots\.txt|favicon\.ico)
RewriteRule ^(.*)$ /index.php/$1 [L]
我的托管服务提供商服务器上的相同代码给出了 404 错误代码,并且仅输出:未指定输入文件。index.php 在那里。我知道他们安装了 Apache(无法在任何地方找到版本信息)并且他们正在运行 PHP v5.2.8。
我使用的是 64 位 Windows XP,它们以 cgi/fastcgi 模式运行一些 Linux 和 php。有人能指出问题出在哪里吗?
附言:如果这对 CodeIgniter 来说很重要,那么可以使用友好的 URL。
答案1
事实证明我需要RewriteBase:
RewriteEngine on
RewriteBase /
RewriteCond $1 !^(index\.php|css|gfx|js|swf|robots\.txt|favicon\.ico)
RewriteRule ^(.*)$ /index.php/$1 [L]
答案2
- 仔细检查换行符结尾。Apache 对 .htaccess 中的换行符比较挑剔。
- 在 .htaccess 中关闭多视图(选项 - 多视图),如牧羊犬IT
- 你可以随时使用 phpinfo() 函数了解有关你的环境的更多信息
答案3
我在尝试为我的 CodeIgniter 项目配置一个友好的 URL 时遇到了同样的问题。我终于搞明白了。让我们看看我的 apache2 配置:
<Directory /home/hai/www>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
问题出在 AllowOverride 行没有任何. 将 None 更改为全部并且有效:
<Directory /home/hai/www>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
更新:我的系统信息:
- 服务器:Xubuntu 9.x(与 Ubuntu 基本相同)
- Apache:版本 2.2
- 有问题的配置位于 /etc/apache2/sites-available/default
顺便说一句,我是网页设计、php 和 CodeIgniter 的新手(我上周刚开始使用 php,昨天开始使用 CodeIgniter),所以请指出我的回答中的任何错误。
更新 2:如果之后您收到错误代码 500 而不是 404。这意味着您没有启用重写模块。发出以下命令来修复它:
$ sudo a2enmod rewrite