情况如下:我有古老的 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 文档和网站行为的研究,当
- domain.com/aaa/ 打开,它重写/打开一个脚本,好像调用 domain.com/index.php/aaa/
- domain.com/?a=1&b=2 打开,它重写/打开一个脚本,好像调用 domain.com/index.php/?a=1&b=2
等等,URL 末尾的可选斜杠。其他“301”重定向是根据数据库结果/设置在 PHP 中进行的,现在这并不重要。
现在我的问题是:当我将此 .htaccess 文件 + PHP 脚本传输到“新”服务器时,我在浏览器中收到此错误消息:
未指定输入文件。
我已经尝试了几个小时并研究了正则表达式和 Apache 文档,但我无法让它发挥作用。我猜两台服务器上的 Apache2 配置有些不同,但找不到那是什么。甚至尝试将 echo 放在 index.php 的开头,以确保此错误不是来自 PHP,但不是 :-( 我确信 .htaccess 支持已启用,因为我可以在输入错误指令时生成错误。不是正则表达式大师。有人可以帮忙吗?
更新:通过将其更改为解决:
RewriteRule ^([^/]+)/?$ %{DOCUMENT_ROOT}index.php [NE,L]
有趣的是 /$1 不是必需的,但是我必须将 PHP 也从 $_SERVER["PATH_INFO"] 更改为 $_SERVER["REQUEST_URI"]。