Я пытаюсь развернуть приложение Fat Free Framework на поддомене. Он хорошо работал на моем локальном сервере, но я получил пустую страницу при развертывании его на поддомене на живом сайте. Я думаю, что я как-то получил свои конфигурации (.htaccess
, config / маршруты) неправильно, но я пробовал несколько, но не могу заставить его работать. Мои конфиги:
.маршруты файл
[routes]
GET /games/@gameid/@move = WebPage->getgames
.конфиг файл
[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, как это
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]
Это кажется неправильным:
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]
РЕДАКТИРОВАТЬ: На основании того, что вы предоставляете .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
Видимо, это было вызвано ошибкой 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]
Нет стресса, нет суеты.