【发布时间】:2010-12-06 03:33:44
【问题描述】:
有人可以帮我解决这个问题吗?我感觉自己的头撞墙已经超过 2 小时了。
我的机器上安装了Apache 2.2.8 + PHP 5.2.6,下面代码的.htaccess 工作正常,没有错误。
RewriteEngine on
RewriteCond $1 !^(index\.php|css|gfx|js|swf|robots\.txt|favicon\.ico)
RewriteRule ^(.*)$ /index.php/$1 [L]
我的托管服务提供商服务器上的相同代码给了我一个 404 错误代码并输出 only: No input file specified. index.php 在那里。我知道他们安装了 Apache(在任何地方都找不到版本信息)并且他们正在运行 PHP v5.2.8。
我在Windows XP 64-bit,他们在CGI/FastCGI 模式下运行一些Linux 和PHP。谁能提出可能是什么问题?
PS。如果这很重要,那就是 CodeIgniter 使用友好的 URL。
更新1:
mod_rewrite 已安装并开启。
我注意到,如果我将 RewriteRule 更改为 /index.php?$1(问号而不是正斜杠),它会进入无限循环。无论如何,使用问号不是一个选项,因为CodeIgniter(必需)不会以这种方式工作。
当我直接请求 index.php 时,主页也可以工作:example.com/index.php
我开始认为它可能是 apache 认为一旦添加了尾部斜杠,它就不再是一个文件而是一个文件夹。如何改变这种行为?
更新 2:
我错了。
Apache 正确处理这些 URL。
请求http://example.com/index.php/start/(主页)或任何其他有效地址都有效。
似乎Apache 只是出于某种原因没有转发查询。
更新 3:
只是为了清楚我想要实现的目标。
我想像这样重写地址:
http://www.example.com/something/ => http://www.example.com/index.php/something/ http://www.example.com/something/else/ => http://www.example.com/index.php/something/else/
【问题讨论】:
-
尝试使用 mod_rewrite 的日志功能进行一些调试(参见
RewriteLogLevel指令)。 -
上传一个带有文本的 PHP 文件:
<?php phpinfo(); ?>- 访问该文件将打印出所有服务器设置,包括 Apache 版本和可能的 Apache 模块列表。您需要确保安装了 mod_rewrite 才能使用这些功能。 -
试过了。 apache 版本从那里被剥离。
-
我不确定我是否完全理解您的问题。现在一切正常吗?你想重写/从哪些网址?
-
不,不工作。问题已更新。
标签: php apache .htaccess codeigniter