有人可以帮我弄这个吗?我感觉自己已经将头撞在墙上超过2个小时了。
我已经Apache 2.2.8 + PHP 5.2.6安装在机器上,.htaccess下面的代码可以正常工作,没有错误。
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。
only: No input file specified.
我在Windows XP 64-bit,他们正在运行的一些Linux与PHP在CGI/FastCGI模式。谁能建议可能是什么问题?
Windows XP 64-bit
Linux
PHP
CGI/FastCGI
PS。如果很重要,那是为了CodeIgniter使用友好的URL。
CodeIgniter
更新1:
mod_rewrite 已安装并继续。
mod_rewrite
我注意到的是,如果更改RewriteRule为/index.php?$1(问号而不是正斜杠),它将陷入无限循环。无论如何,使用问号不是一种选择,因为CodeIgniter(必填)不会以这种方式工作。
RewriteRule
/index.php?$1
当我直接请求index.php时,主页也可以工作: example.com/index.php
example.com/index.php
我开始认为这可能是apache,认为一旦添加了斜杠,它就不再是文件而是文件夹。如何改变这种行为?
更新2:
我错了。 Apache会正确处理这些URL。 请求http://example.com/index.php/start/(主页)或任何其他有效地址均可。 似乎Apache由于某种原因而没有转发查询。
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/
我也反对这一点。我也在安装Code Igniter。
古怪的不是RewriteBase。这是我的.htaccess:
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]