有人可以帮我弄这个吗?
我有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
,他们正在运行一些Linux
和PHP
在CGI/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]