我想配置我的 apache2.4.7 来在内部重定向请求,如下所示:
/app/download/somefile => /app/download.php/somefile
或类似的东西。经过各种尝试,但都不起作用,我最终找到了一个非常简单的替代方案,但它也根本不起作用。我在 /etc/apache2/apache2.conf 中添加了 2 行:
RewriteEngine on
RewriteRule "^/app/testtest\.php" "/app/index.php"
没用。然后我在目录中添加了同样的东西:
<Directory /var/www/html/app>
AllowOverride All
RewriteEngine on
RewriteRule "^/app/testtest\.php" "/app/index.php"
</Directory>
同样的事情,只是没有效果。我也在 .htaccess 文件中尝试过此规则,同样没有效果。/app/index.php 存在,我确定我正在编辑正确的配置(添加了语法错误,然后服务器在重新启动时不会出现)并且我的想法已经用完了。我做到了不是忘记启用重写模块,我执行了
a2enmod rewrite
任何帮助都将受到赞赏。
============================ 更新 ==============================
好的,我通过将以下内容添加到 sites-enabled/000-default.conf 来使重写部分工作
RewriteEngine On
RewriteRule "^/app/(.+)" "/app/$1.php"
不知道为什么它在其他地方不起作用,但总比没有好。现在,我可以访问 /app/index,但不能访问 /app/index.php,因为 /app/index.php 会重写为不存在的 /app/index.php.php。所以我添加了一个条件
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule "^/app/(.+)" "/app/$1.php"
我在一些论坛和文档中看到,这是实现该目标的方法。但是,根本不起作用。它对 php 文件(仍然无法使用扩展名 .php 访问它们)和图像文件都不起作用。以下是日志摘录:
script '/var/www/html/app/icons/bin_closed.png.php' not found or unable to stat
为什么我的条件被忽略了?谢谢您的提示。
答案1
找到了。在这种情况下,RewriteCond 需要文件的完整路径。当我像这样配置时,一切都运行顺利:
RewriteEngine On
RewriteCond /var/www/html/%{REQUEST_FILENAME} !-f
RewriteCond /var/www/html/%{REQUEST_FILENAME} !-d
RewriteRule "^/app/(.+)" "/app/$1.php"
我从示例中复制了一些内容,但它们的工作方式与我的场景不完全相同......