Apache2 无法使简单的 mod_rewrite 规则发挥作用

Apache2 无法使简单的 mod_rewrite 规则发挥作用

我想配置我的 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"

我从示例中复制了一些内容,但它们的工作方式与我的场景不完全相同......

相关内容