У меня есть перенаправление, но я не знаю, где оно активировано?
Я установил приложение PHP под названием GARRADIN. Существует .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 => перенаправление все еще работает! - Я сбросил кеш браузера, использовал другой браузер => такое же перенаправление.
так ГДЕ настроено перенаправление?
THX за вашу помощь.
Полный .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>
@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
Поведение, которое вы наблюдаете, свидетельствует о наличии MultiViews
(часть mod_negotiation) включена в конфигурации вашего сервера (это не включен по умолчанию).
поскольку /admin
это физический каталог и plugin
соответствует базовому имени файла в этом каталоге, mod_negotiation ищет подходящий ответ, проверяя различные расширения файлов. В этом случае будет выполнен внутренний подзапрос для /admin/plugin.php
- без параметров запроса. Это случилось перед mod_rewrite, поэтому ваша обновленная директива, похоже, ничего не делает.
Вам нужно отключить MultiViews
.
В верхней части вашего .htaccess
файл добавьте следующее:
Options -MultiViews
Это перенаправление работает.
Это чаще называют внутренняя перезапись. "Перенаправление" подразумевает внешнее перенаправление.
Обратите внимание, что регулярное выражение admin/plugin/(.*?)/(.*)
потенциально соответствует большему количеству, чем предполагалось, так как вам не хватает привязки начала строки (^
). Таким образом, это также будет соответствовать чему-то вроде /foobaradmin/plugin//
.