我正在尝试在子域上部署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文件
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]
答案 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]
没有压力,没有大惊小怪。