子域上的Fat Free Framework配置

时间:2014-09-20 16:31:15

标签: php .htaccess subdomain fat-free-framework

我正在尝试在子域上部署Fat Free Framework应用程序。它在我的本地服务器上运行良好,但是我在实际站点的子域上部署了一个空白页面。我相信我在某种程度上得到了我的配置(.htaccess,配置/路由)错误,但我已经尝试了几个,但无法让它工作。我的配置是:

.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文件
  • app文件夹
  • db文件夹
  • 观看文件夹
  • third_party文件夹
  • tmp文件夹

在我的本地服务器上,我有像这样的.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]

2 个答案:

答案 0 :(得分:0)

这似乎不正确:

RewriteBase /subdomain.domain.com

我会将其更改为:

RewriteBase /

原因是RewriteBase仅指服务器本身的URL基础,而不是指向“左侧”的任何内容。这意味着这是您的主站点URL:

  

http://subdomain.domain.com

设置RewriteBase /subdomain.domain.com意味着规则只会对以下网址执行操作:

  

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

为了使它更清晰,如果代码在基本URL的“右侧”路径上运行,则只会调整RewriteBase /(然后是相应的RewriteRule)。因此,假设您已将其安装在mycoolapp/目录中,并且您希望可以像这样访问它:

RewriteBase /mycoolapp/

然后你必须像这样调整RewriteRule的{​​{1}}:

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

答案 1 :(得分:0)

显然它是由php错误导致的,因为我关闭了显示错误,我无法看到它。在我上传了全新的应用程序并获得了

后,我的网站主机的支持人员抓住了它
  

内部服务器错误   致命错误:语法错误,意外情况' ['

具体来说,我的网络托管支持人员说它与PHP阵列解除引用有关。我在下面部分引用

  

..看起来你的脚本的一部分正在使用数组解除引用   适用于PHP 5.4+和..

所以我们切换到PHP 5.4+并且bam一切都已到位。

BTW我使用了以下.htaccess

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

没有压力,没有大惊小怪。