重定向在哪里配置?

重定向在哪里配置?

我有一个重定向,但我不知道它在哪里激活?

我安装了一个名为 GARRADIN 的 PHP 应用程序。其中有一个 .htaccess 文件,其中包含以下行:

RewriteRule admin/plugin/(.*?)/(.*) /admin/plugin.php?_p=$1&_u=$2 [QSA,L]

此重定向有效。plugin.php 被调用,但参数 $1 和 $2 为空。$_GET['_p'] 没有向脚本返回任何内容。

为了了解为什么参数无法传输,我尝试修改 .htaccess,但无论我做什么,它都没有被考虑在内。似乎这个重定向是在其他地方配置的?

我所做的: - 我在 .htaccess 中插入了一个错误,并且我获得了一个服务器错误 => 好的,.htaccess 被考虑在内。 - 我修改了该行以重定向到 XXXXplugin.php 但 plugin.php 仍然被调用。 - 将 .htaccess 重命名为 BAK.htaccess => 重定向仍然有效! - 我已经重置了浏览器缓存,使用了另一个浏览器 => 相同的重定向。

那么重定向在哪里配置?

谢谢你的帮助。

完整的.htaccess:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule admin/plugin/(.*?)/(.*) /admin/XXXXXXXXXXXXplugin.php?_p=$1&_u=$2 [QSA,L]
    RewriteRule f/([\d\w]+)/(.*) /file.php?id=$1&file=$2 [QSA,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule .* /index.php [QSA,L]
</IfModule>

<IfModule !mod_rewrite.c>
    ErrorDocument 404 /index.php
</IfModule>

答案1

@MrWhite 给我指明了正确的方向。我必须停用 MultiViews,不是在 .htaccess 的顶部(这会导致服务器错误),而是在虚拟主机配置文件的某个部分中停用。

<Directory /home/gestion_o2form/public_html/www>
    Options -Indexes +IncludesNOEXEC +FollowSymLinks -MultiViews <= HERE
    allow from all
    AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,-MultiViews,SymLinksIfOwnerMatch
    Require all granted
    AddType application/x-httpd-php .php
</Directory>

而且它有效!

感谢所有人,特别是@MrWhite

答案2

您看到的行为表明MultiViews您的服务器配置中启用了(mod_negotiation 的一部分)(它是不是默认启用)。

由于/admin是物理目录,并且plugin与该目录中的文件基名相对应,因此 mod_negotiation 通过测试各种文件扩展名来搜索合适的响应。在这种情况下,它将发出内部子请求/admin/plugin.php- 不带任何查询参数。这种情况发生mod_rewrite,这就是为什么您更新的指令似乎没有执行任何操作。

您需要禁用MultiViews

在文件顶部.htaccess添加以下内容:

Options -MultiViews

此重定向有效。

这通常被称为内部重写。“重定向”意味着外部重定向

admin/plugin/(.*?)/(.*)请注意,由于缺少字符串起始锚点 ( ),正则表达式可能匹配超出预期的内容^。因此它还会匹配类似 的内容/foobaradmin/plugin//

相关内容