.htaccess与^(。*)$ index.php / $ 1给出“未指定输入文件”

时间:2012-10-11 21:23:42

标签: php apache .htaccess codeigniter

我正在运行Code Igniter,我的.htaccess是:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?$1 [L]
    RedirectMatch 404 /\\.svn(/.*|$)
</IfModule>

然后我意识到没有$ _GET变量通过。

我按照一些说明创建.htaccess以与Code Igniter一起使用,并将index.php?$1替换为index.php/$1。这适用于Linux机器,但在Windows上却没有。我确定它是服务器配置,但我不知道哪一个。

假设我访问

http://localhost/directory/this_is_query/string_parameters?with_some=additional_ones

.htaccess上$_SERVER['QUERY_STRING']的{​​{1}}值为:

index.php?$1

使用string(31) "this_is_query/string_parameters"

index.php/$1

在Linux机器上我有:

No input file specified. 

作为string(31) "with_some=additional_ones" 的回复。

有什么想法吗?


我在index.php/$1的FIRST行调试$_SERVER['QUERY_STRING']变量,没有与Code Igniter的任何交互。

是的,我确实有index.php

这与Codeigniter no input file specified error

不同

在问这个问题之前,我看到了这个问题。我仍然处理这个问题。

我添加了新信息。

2 个答案:

答案 0 :(得分:1)

我认为您缺少the QSA option将查询字符串附加到结尾:

RewriteRule \.svn/ - [F,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [L,QSA]

为了保持查询参数的组织,如果CodeIgniter允许,我建议设置一个参数名称:

RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]

答案 1 :(得分:0)

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