使文件扩展名由PHP解释

时间:2015-04-17 06:26:53

标签: php apache .htaccess mod-fcgid

我将此添加到我的.htaccess文件中:

AddHandler fcgid-script .test

(我使用的是FastCGI / VirtualMin / WebMin)

用包含内容的test.test文件创建;

<?php echo "test"; ?>

这会导致内部服务器错误,并在错误日志中显示此消息:

[Thu Apr 16 14:12:57.631287 2015] [fcgid:warn] [pid 2646] (104)Connection reset by peer: [client xxxx:53595] mod_fcgid: error reading data from FastCGI server
[Thu Apr 16 14:12:57.631402 2015] [core:error] [pid 2646] [client xxxx:53595] End of script output before headers: test.test

我做错了什么?我尝试使用不同的处理程序名称,如x-httpd-php或x-httpd-php5,但它根本不做任何事情。

我也尝试过:

<FilesMatch "\.test$">
  SetHandler fcgid-script
</FilesMatch>

但它有相同的内部服务器错误。

6 个答案:

答案 0 :(得分:6)

似乎FastCGId模块不知道如何执行脚本 - FcgidWrapper指令似乎缺失(因为您的PHP脚本没有Shebang)。

根据您的发行版,您必须手动设置它,或者您可以调整已经处理.php文件的现有指令以处理.test文件(通常这应该使用“SetHandler fcgid-script”指令和设置来完成/复制FcgidWrapper指令)。

调整后的示例(取自https://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#examples):

<FilesMatch "\.test$">
    AddHandler fcgid-script .test
</FilesMatch>
Options +ExecCGI
FcgidWrapper /usr/bin/php5-cgi .test

更多信息和示例:https://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#exampleshttp://tltech.com/info/php-on-fcgid/

其他问题可能基于权限,例如如果您使用suexec,则fastcgid进程无法写入日志或无法执行包装器脚本。如果您能说明正常的.php文件是否正确执行,那将非常有用。

答案 1 :(得分:2)

尝试在htaccess文件中使用它

AddType application/x-httpd-php .test

请参阅此Stack Overflow问题:Problem with Executing CGI Scripts on Apache

答案 2 :(得分:2)

经过测试并验证可行:

因为您提到您正在使用Webmin,所以我为Webmin量身定制了答案。你也可以通过shell编辑Apache的配置来实现这一点。

我会注意到,通常最好编辑Apache的配置,在这种情况下可能是不可避免的,因为我不相信你可以在.htaccess进行这种编辑。虽然可能存在我不熟悉的黑客攻击,但服务器管理员可能希望将其锁定在apache配置中。考虑到.htaccess文件的流氓文件扩展名在每个目录的基础上飞来飞去不仅听起来很慢,而且非常不安全。

的步骤

我通过VirtualBox在Ubuntu 14.04上安装了Apache。我添加了Webmin和FastCGI。

我采取了以下步骤:

  1. 登录Webmin,转到虚拟主机。
  2. 点击修改指令
  3. 在底部添加以下内容:
  4. <Directory />
        #Your SetHandler script here 
        #(@MrTux's script works here but NOT IN .htaccess)
    
        Require all granted
    </Directory>
    
    1. 点击保存
    2. 点击&#34;应用更改&#34;在顶部。
    3. 你已经完成了!
    4. 我会注意到SetHandler传递了一些标题,所以如果你在.htaccess中声明这个,那么有可能已经发送了标题,这就是触发你的错误。同样,如果您可以控制系统,.htaccess不是设置规则的首选方式。在这种情况下,它可能会导致安全问题。

答案 3 :(得分:0)

我不是一个快餐人。我googled这个问题。我在virtualmin发布了2个类似的问题。我只是附上那里发布的答案。

  

https://www.virtualmin.com/node/34903

  1. 转到virtualmin \ your virtual server \ server configuration \ website options \
  2. 选择&#34; Apache mod_php(以Apache的用户身份运行)&#34;然后保存
  3. 切换回&#34; FCGId(作为虚拟服务器所有者运行)&#34;(它将请求您以域所有者身份运行CGI脚本)
  4. 保存
  5.   

    https://www.virtualmin.com/node/25539

    转到/ home / sitename / fcgi-bin 使用follpwoing命令重置不可变标志

    &#34; chattr -i php5.fcgi&#34;

    然后删除/ home / sitename / etc和/ home / sitename / fcgi-bin目录(确保保存了与php不相关的任何内容) 使用virtualmin切换回apache mod_php模式,然后返回FCGId模式。该网站现在应该工作不要忘记在public_html中显示任何apache的文件/目录:注意这些通常都是网站名称。

    希望它会对你有所帮助。

答案 4 :(得分:0)

我质疑fcgid-script处理程序。即使对于FCGI,这也不是普通的PHP处理程序。通常你会看到

<FilesMatch "\.test$">
     SetHandler application/x-httpd-php
</FilesMatch>

或者

<FilesMatch "\.test$">
     SetHandler php5-fcgi
</FilesMatch>

如果这些都不起作用,请检查以确保安装了PHP FCGI。

答案 5 :(得分:0)

所有CGI脚本都要求您在脚本顶部添加Shebang行。

因此,如果你想运行PHP,你应该包括:

#!/path/to/php

在脚本顶部使其正常工作