mod_rewrite“未指定输入文件”错误

时间:2013-09-24 11:41:11

标签: regex .htaccess mod-rewrite apache2

情况如下:我在古老的服务器上运行了很好的PHP脚本(Apache / 2.2.3,PHP作为模块),我需要将它移动到“新”服务器(Apache / 2.2.16( Debian),PHP作为fcgi / suhoshin)...至少我的ISP告诉你。

我有一个非常简单的.htaccess文件,可以在“旧”服务器上正常工作:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/css   #Just an exception for domain.com/css dir
RewriteRule ^([^/]+)/?$  %{DOCUMENT_ROOT}/index.php/$1 [NE,L]

从我学习mod_rewrite docs和网站行为时,

  • domain.com/aaa/已打开,它会重写/打开脚本,就像调用domain.com/index.php/aaa /
  • 一样
  • domain.com/?a=1&b=2已打开,它会重写/打开一个脚本,就像调用domain.com/index.php/?a=1&b=2
  • 一样

等,URL末尾的optinal斜杠。 其他“301”重定向是根据数据库结果/设置在PHP中制作的,现在并不重要。

现在我的问题是:当我将此.htaccess文件+ PHP脚本传输到“新”服务器时,我在浏览器中收到此错误消息:

  

未指定输入文件。

我一直在尝试几个小时学习正则表达式和Apache文档,但我无法使其正常工作。我猜两台服务器上的Apache2配置有些不同,但找不到它。甚至试图在index.php的开头放置echo以确保此错误不是来自PHP,但没有:-(我确定.htaccess支持已打开,因为我可以在输入错误的指令时生成错误。 regular_expressions guru。有人可以帮忙吗?

更新:通过将其更改为:

解决
RewriteRule ^([^/]+)/?$  %{DOCUMENT_ROOT}index.php [NE,L]

有兴趣/ $ 1不是必需的,但是我必须从$ _SERVER [“PATH_INFO”]将PHP更改为$ _SERVER [“REQUEST_URI”]。

1 个答案:

答案 0 :(得分:1)

你可以尝试这段代码:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} !^/css [NC]
RewriteRule ^([^/]+)/?$ /index.php/$1 [NE,L]