htaccess не работает после перехода с веб-хоста на локальный хост Synology

У меня есть размещенный веб-сайт, на котором я использую следующий файл htaccess для форматирования URL-адресов. Все они работают нормально. Хост использует Apache, но, к сожалению, не показывает номер версии. Я думаю, что 2,4.

Options +FollowSymLinks 
RewriteEngine on

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

RewriteRule ^item/([0-9]+)/(.*) /item.php?item=$1&title=$2 [L]
RewriteRule ^category/(.*) /showitems.php?category=$1 [L]
RewriteRule ^search/(.*) /searching.php?options=$1 [L]
RewriteRule ^searching/(.*) /showitems.php?search=$1 [L]
RewriteRule ^update/(.*) /showitems.php?update=$1 [L]

AddType application/x-httpd-lsphp .html .htm .shtml

Я скопировал весь сайт на свой локальный Synology Diskstation с помощью Apache 2.4.

URL-адреса перезаписи для категории, поиска и обновления работают нормально. Однако URL-адреса для «поиска» и «элемента» возвращают ошибку 404. «Поиск» — это перенаправление заголовка из «searching.php».

Элемент является странным в том смысле, что он использует 2 параметра получения в URL-адресе результата. В режиме проб и ошибок я изменил его на:

RewriteRule ^item/(.*) /item.php?item=$1 [L]

Что тоже не работает, однако

RewriteRule ^itemitem/(.*) /item.php?item=$1 [L]

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

Что мне не хватает? Или есть лучший способ приблизиться к этим переписываниям в первую очередь, который я мог бы попробовать?


person PietDraaier    schedule 04.06.2018    source источник
comment
Попробуйте отключить MultiViews, который обычно является виновником в таких ситуациях.   -  person CBroe    schedule 04.06.2018


Ответы (1)


То, что CBroe прокомментировал ваш пост, является правильным ответом. Чтобы быть более конкретным и объяснить, почему, если на вашем сервере Apache 2.x включено MultiViews, он попытается сопоставить для вас такие вещи, как имена каталогов, имена файлов от вашего имени, чтобы упростить работу пользователя.

Однако во многих случаях это может привести к путанице в ваших правилах перезаписи, которые ожидают очень специфических регулярных выражений.

В большинстве случаев вы можете просто отключить MultiViews. Вы отключаете его, добавляя к своим параметрам в файле .htaccess.

-MultiViews

Обратите внимание, что если каталог AllowOverrive не позволяет этого, вам необходимо изменить файл конфигурации Apache для этого виртуального хоста/каталога, чтобы включить параметр -MultiViews.

Вы можете прочитать больше о MultiViews здесь:

http://httpd.apache.org/docs/current/content-negotiation.html

Другой и, возможно, более правильный способ - лучше построить свои правила перезаписи и использовать такие вещи, как параметр "!-f" или "!-d", чтобы ваши правила знали, что вы не хотите включать файлы или каталоги. и так далее.

Между прочим, небольшое замечание о MultiViews, хотя это очень модно и аккуратно. Если вы используете рабочий сайт, знайте, что MultiViews создает множество дыр нежелательного дискового ввода-вывода и может немного снизить производительность серверов Apache! Поэтому всегда рекомендуется отключать MultiViews.

person davidbl    schedule 04.06.2018