Htaccess не работает, но проверьте успешный локальный хост

У меня есть простой .htaccessfile

DirectoryIndex index.php
RewriteEngine On
RewriteRule ^v4r.info/(.*)/(.*) v4r.info/NGOplus/index.php?NGO=$1&page=$2 [L,QSA]

Я проверил файл в htaccess.madewithlove.com, он дает правильный результат, а копирование и вставка результата работает безупречно. (http://localhost/v4r.info/NGOplus/index.php?NGO=action-for-woman&page=board.list.php&ff=710;;;;;&startdate=2017-11-11)

Но htaccess не работает на локальном хосте с ошибкой:

File does not exist:
/var/www/html/public_html/v4r.info/action-for-woman/board.list.php

Тестовый URL-адрес

localhost/v4r.info/NGOplus/index.php?NGO=action-for-woman&page=board.list.php&ff=710;;;;;&startdate=2017-11-11

  • htaccess активен. (мусорная строка дает "внутренняя ошибка сервера")

  • в другом каталоге htaccess работает нормально.

  • apache.conf выглядит нормально (AllowOverride All)

Добавлен:

Файл htaccess находится не в базовом каталоге, а в подкаталоге 1. (v4r.info).

Что работает, так это htaccess в v4r.info/NGOplus с символической ссылкой «action-for-woman» на NGOplus. Правило перезаписи ^(.+?)/?$ index.php?page=$1 [L,QSA]

Здесь apache выполняет «локальную» перезапись, то есть только последнюю часть URL-адреса (имя каталога «action-for-woman» я должен извлечь из $_SERVER...)

«Тестовый URL-адрес…» — вы не имеете в виду, что тестовый URL-адрес localhost/v4r.info/action-for-woman/board.list.php?ff=710;;;‌​;;&startdate=2017-11‌​-11? Потенциальная проблема с опубликованным вами правилом заключается в том, что оно будет перезаписывать себя (хотя в данном случае это не должно быть проблемой), а также будет проблемой при прямом запросе целевого URL-адреса (но вы говорите, что это не так).

MrWhite 05.05.2022 02:52

Я думаю, это признак того, что apache не перезаписывает. Но в любом случае переписывание не рекурсивно.

user30424 05.05.2022 08:53

мой файл .htaccess находится в каталоге v4r.info, который не является корневым каталогом.

user30424 05.05.2022 09:19
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
3
25
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

my .htaccess file is in v4r.info directory what is not the root directory.

В этом случае ваше правило никогда не будет совпадать. RewriteRuleшаблон соответствует URL-пути относительно каталога, содержащего файл .htaccess.

But anyhow, rewriting is not recursive afaik.

Да, это «рекурсивно» в контексте каталог (т.е. .htaccess). В том, что механизм перезаписи «зацикливается» многократно, пока URL-адрес не пройдет без изменений или вы явно не установите END (Apache 2.4).

Вместо этого попробуйте следующее:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_URI} !index\.php$
RewriteRule ^([^/]+)/([^/]+)$ /v4r.info/NGOplus/index.php?NGO=$1&page=$2 [L,QSA]

Проверка переменной среды REDIRECT_STATUS заключается в том, чтобы убедиться, что перезаписываются только прямые запросы, а не уже перезаписанные запросы.

Однако этот шаблон слишком общий, поскольку он соответствует любым двум сегментам пути. Я поставил второе условие, которое проверяет index.php, чтобы вы могли запросить /v4r.info/NGOplus/index.php напрямую (как вы делали в своих тестах). Однако этого можно избежать, сделав регулярное выражение более конкретным.

Это не сработало, пока я не удалил каталог символической ссылки «действие для женщины» (указывающий на NGOplus). Но после удаления этой ссылки все работает

user30424 05.05.2022 11:27

Что кажется странным: <dir>/<file> не работает, когда dir является символической ссылкой, указывающей на NGOplus. dir, являющийся пустым каталогом, не препятствует перезаписи.

user30424 05.05.2022 11:40

Другие вопросы по теме