Назад | Перейти на главную страницу

Где настроено перенаправление?

У меня есть перенаправление, но я не знаю, где оно активировано?

Я установил приложение 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//.