0

情况如下:我有古老的 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"]。

4

1 回答 1

1

你可以试试这个代码:

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

RewriteCond %{REQUEST_URI} !^/css [NC]
RewriteRule ^([^/]+)/?$ /index.php/$1 [NE,L]
于 2013-09-24T13:34:56.247 回答