Внутренняя ошибка сервера в продакшене, но не в локальном и не на /маршруте

Было разработано приложение Slim (микрофреймворк PHP). Он работает на локальном хосте, но выдает ошибку 500. Вот подробности:

  • Он полностью работает в локальном режиме.
  • В рабочей среде домашний маршрут ("/") работает, но все остальные маршруты выдают ошибку 500.
  • Если какой-либо конкретный маршрут указан в маршруте «/», он работает.
  • Сайт Slim размещен на поддомене. Сайт Wordpress размещен на основном домене.
  • Он размещен на виртуальном хостинге 1and1.
  • Точная ошибка:

Внутренняя ошибка сервера: сервер обнаружил внутреннюю ошибку или неправильную конфигурацию. Кроме того, при попытке использовать ErrorDocument для обработки запроса возникла ошибка 500 Internal Server Error.

  • Несколько файлов htaccess были безуспешно опробованы.

Спасибо за ваши идеи по решению проблемы!


person Blaise d'Estais    schedule 12.09.2018    source источник
comment
Как вы воспроизвели ошибку? Что означает часть ошибки?   -  person Nima    schedule 13.09.2018
comment
@Nima Я не уверен на 100%, но думаю, что ошибка повторилась при попытке использовать другой файл .htaccess. По крайней мере, часть ошибки означает, что у меня была такая же внутренняя ошибка сервера 500, но, возможно, это была только часть ошибки, и, возможно, это не имело ничего общего с ошибкой, которая у меня есть в производстве, кто знает?   -  person Blaise d'Estais    schedule 14.09.2018
comment
Если ваше приложение Slim находится внутри подпапки определенного виртуального хоста или даже хоста по умолчанию, вам нужно использовать RewriteBase, чтобы сообщить mod_rewrite, как обрабатывать относительные пути во время перезаписи. Для начала добавьте RewriteBase /slim_app (замените slim_app на имя вашей подпапки) в самом верху ваших правил перезаписи (но после RewriteEngine on). Если это не сработает, увеличьте LogLevel (https://httpd.apache.org/docs/2.4/mod/core.html#loglevel) с чувствительностью не менее trace6 для rewrite (LogLevel alert rewrite:trace6) и посмотрите, что выдают журналы.   -  person brezanac    schedule 14.09.2018
comment
@brezanac Я сделал RewriteBase /MyProjectName и RewriteBase /MyProjectName/web (если в папке Сервера есть Server/TheWordpressSite и Server/MyProjectName). Рут / работает, а другие нет — в проде и в локалке.   -  person Blaise d'Estais    schedule 14.09.2018
comment
@Blaised'Estais Rewrites может сильно зависеть от различий в настройках сервера, поэтому я снова предлагаю пропустить предположения и сразу перейти к журналам. Просто поднимите уровень журнала как минимум до trace6 для rewrite и проверьте, что именно происходит в течение всего процесса (каждый шаг будет записываться). Однако обратите внимание, что trace6 будет записывать МНОГО данных, поэтому настоятельно рекомендуется просто использовать его для главной страницы, чтобы поймать трассировку, а затем вернуть ее к стандартному значению, пока вы не проанализируете журнал.   -  person brezanac    schedule 14.09.2018
comment
@brezanac хорошо, я только что нашел, как это изменить. Это в редакции.   -  person Blaise d'Estais    schedule 14.09.2018


Ответы (2)


Вы можете попробовать этот, он работал для старого проекта

<IfModule mod_rewrite.c>
    # Activate this if you need to follow symlinks
    #Options +FollowSymlinks
    RewriteEngine On

    # Explicitly disable rewriting for front controller
    RewriteRule ^index.php - [L] RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ /index.php [QSA,L]
</IfModule>
person MinDBreaK    schedule 14.09.2018
comment
Спасибо @MinDBreak, это сработало! ! ! (PS: я проголосовал за вас, но SOF не отображает это, пока у меня не будет 15 баллов... :) - person Blaise d'Estais; 14.09.2018

не могли бы вы попробовать вместо этого файл .htaccess?

# Redirect to front controller
RewriteEngine On
# RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L] 
person odan    schedule 13.09.2018
comment
Ваш Apache DocumentRoot указывает на папку web/? Подробнее - person odan; 14.09.2018
comment
Да, DocumentRoot был определен на сервере как path/to/web. Но я только что прочитал: Чтобы включить модуль перезаписи, запустите: sudo a2enmod rewrite sudo a2enmod actions Если вы планируете использовать mod_rewrite в .htaccess файлах, вам также необходимо включить использование .htaccess файлов, изменив AllowOverride None на AllowOverride All. Но так как это виртуальный хост, то у меня может и не быть этих прав, может поэтому... - person Blaise d'Estais; 14.09.2018