htaccess не работает после перехода с веб-хоста на локальный хост Synology - PullRequest
0 голосов
/ 04 июня 2018

У меня есть веб-сайт, на котором я использую следующий файл 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 ошибки.«Поиск» - это перенаправление заголовка из «search.php»

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

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

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

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

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

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

1 Ответ

0 голосов
/ 04 июня 2018

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

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

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

-MultiViews

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

Подробнее о MultiViews вы можете прочитать здесь:

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

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

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

...