我有一个重定向,但我不知道它在哪里激活?
我安装了一个名为 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//
。