Конфигурации Fat Free Framework на поддомене

Я пытаюсь развернуть приложение Fat Free Framework на поддомене. Он отлично работал на моем локальном сервере, но я получаю пустую страницу при его развертывании на поддомене на действующем сайте. Я считаю, что каким-то образом неправильно настроил свои конфигурации (.htaccess, config/routes), но я пробовал несколько, но не могу заставить их работать. Мои конфиги:

файл .routes

[routes]
GET /games/@gameid/@move = WebPage->getgames

файл .config

[globals]
AUTOLOAD = app/;third_party/;third_party/phpQuery/
DEBUG = 0
UI = views/
ENCODING = utf-8
LOGS= tmp/cache/

файл .htaccess

#mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L,QSA]

#Hotlinking Protection
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?subdomain.domain.com/.*$ [NC]
RewriteRule \.(js|css|jpg|gif|png|bmp|mp4|3gp|m4a|m4r|aac|mp3|ogg|wave)$ - [F]

#PHP code in HTML file
AddType fcgid-script .php .htm .html .phtml

Я на PHP версии 5.3.28 Apache 2.3.7

Структура папок

subdomain.domain.com (папка поддомена)

  • .htaccess файл
  • файл index.php
  • папка приложения
  • папка базы данных
  • папка просмотров
  • папка третья_сторона
  • временная папка

На моем локальном сервере у меня есть файл .htaccess, подобный этому

Order Deny,Allow
Deny from all
Allow from 127.0.0.1
Allow from ::1
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* index.php [L,QSA]

person dtechplus    schedule 20.09.2014    source источник
comment
Что такое файл .htaccess на вашем локальном сервере, где он работает? Это кажется неправильным: RewriteBase /subdomain.domain.com.   -  person Giacomo1968    schedule 20.09.2014
comment
Да, как также сказал ДжейкГулд, я отредактировал файл .htaccess, чтобы он читался как \, но все равно получаю пустую страницу при попытке доступа к subdomain.domain.com/games/01test20140322/1. Файл .htaccess находится в папке поддомена с файлом index.php. Файл приложения, который содержит мою конфигурацию и маршруты, находится в папке чуть ниже /subdomain/app   -  person dtechplus    schedule 20.09.2014
comment
Можете ли вы предоставить URL-адрес, где он работает, а также .htaccess, где он работает? В противном случае мало кто может вам помочь.   -  person Giacomo1968    schedule 20.09.2014
comment
Как я уже говорил ранее, он работает на моем локальном сервере (на виртуальном хосте, а не на субдомене). Я не знаю, правильно ли я отвечаю на ваш вопрос, но я попытался воспроизвести структуру папок выше. Единственное исправление заключается в том, что моя папка поддомена называется subdomain.domain.com в файлах моего веб-хостинга.   -  person dtechplus    schedule 20.09.2014
comment
Вы показываете нам конфигурацию, которая не работает, но какая конфигурация действительно работает на вашей локальной установке? В частности, к какому URL-адресу вы успешно обращаетесь на локальном хосте, и что такое .htaccess, который работает на локальном хосте?   -  person Giacomo1968    schedule 20.09.2014
comment
Хорошо. На моем локальном хосте я обращаюсь к URL-адресу games.loc/games/01test20140322/1, и он работает. . Я отредактировал вопрос, чтобы показать файл .htaccess. Структура папок такая же, разница только в том, что на живом сайте я установил F3 на поддомен. Спасибо за помощь.   -  person dtechplus    schedule 20.09.2014


Ответы (2)


Это кажется неверным:

RewriteBase /subdomain.domain.com

Я бы изменил это просто так:

RewriteBase /

Причина в том, что RewriteBase относится только к базе URL самого сервера, а не к чему-либо еще «левее» от него. Это означает, что это URL-адрес вашего основного сайта:

http://subdomain.domain.com

Установка RewriteBase /subdomain.domain.com будет означать, что правила будут действовать только для URL-адреса:

http://subdomain.domain.com/subdomain.domain.com

И чтобы было немного понятнее, можно настроить RewriteBase / (а затем соответствующий RewriteRule) только в том случае, если код выполняется по пути «справа» от базового URL. Допустим, вы установили его в каталог mycoolapp/ и хотели, чтобы он был доступен следующим образом:

RewriteBase /mycoolapp/

И тогда вам нужно будет настроить RewriteRule для index.php следующим образом:

RewriteRule . /mycoolapp/index.php [L,QSA]

EDIT: На основании того, что вы предоставили .htaccess для своей локальной установки, у вас есть это для вашего mod_rewrite:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* index.php [L,QSA]

Но при настройке вашего субдомена у вас есть это:

RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L,QSA]

Почему такая радикальная разница? Просто используйте mod_rewrite материал, который работает с вашей локальной установкой. В частности, избавьтесь от этой строки в настройках вашего субдомена:

RewriteBase /

И измените эту строку:

RewriteRule . /index.php [L,QSA]

Быть таким:

RewriteRule .* index.php [L,QSA]

Итак, окончательный поддомен .htaccess должен иметь следующее:

#mod_rewrite on
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* index.php [L,QSA]

#Hotlinking Protection
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?subdomain.domain.com/.*$ [NC]
RewriteRule \.(js|css|jpg|gif|png|bmp|mp4|3gp|m4a|m4r|aac|mp3|ogg|wave)$ - [F]

#PHP code in HTML file
AddType fcgid-script .php .htm .html .phtml
person Giacomo1968    schedule 20.09.2014
comment
В порядке. Я отредактировал файл .htaccess, как вы рекомендуете, но все равно получил пустую страницу. Я пытаюсь получить доступ к subdomain.domain.com/games/01test20140322/1 на основе по описанным выше маршрутам. Спасибо - person dtechplus; 20.09.2014
comment
Какова абсолютная база этого URL subdomain.domain.com/games/01test20140322/1? Это полный URL? Или это subdomain.domain.com/games/01test20140322? Или это, subdomain.domain.com/games? - person Giacomo1968; 20.09.2014
comment
Абсолютная база?? Меня немного смущает этот термин, но я пытаюсь получить доступ к subdomain.domain.com/games/01test20140322/1, как я сказал выше. Маршрут /01test20140322 к 'gameid', а /1 - это 'ход', указанный в файле маршрутов. - person dtechplus; 20.09.2014
comment
Нет подсказки. Возможно, вы захотите проверить, что она говорит в журналах ошибок. И вы можете проверить заголовки, выдаваемые сервером, чтобы увидеть, проливает ли это какой-то свет на вещи, выполнив следующее, curl -I http://subdomain.domain.com/games/01test20140322/1. - person Giacomo1968; 21.09.2014
comment
Теперь работает нормально. Опубликовал причину предыдущей проблемы в качестве ответа. - person dtechplus; 21.09.2014

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

Внутренняя ошибка сервера Неустранимая ошибка: синтаксическая ошибка, неожиданное '['

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

.. похоже, что часть ваших скриптов использует разыменование массива, которое работает на PHP 5.4+, и ..

Итак, мы перешли на PHP 5.4+, и бац все встало на свои места.

Кстати, я использовал следующий .htaccess

#mod_rewrite on
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L,QSA]

Без стресса, без суеты.

person dtechplus    schedule 21.09.2014