有人可以帮我弄这个吗?

我有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 就在那里。

我上线了Windows XP 64-bit,他们正在运行一些LinuxPHPCGI/FastCGI模式。

附言。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/

答案

我也曾为此绞尽脑汁。

问题的关键不是 RewriteBase。

DirectoryIndex index.php

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|robots\.txt)

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

来自: stackoverflow.com