Silverstripe mod_rewrite问题(我认为)

时间:2013-12-09 16:09:58

标签: .htaccess silverstripe

我一直在努力的网站,当我尝试将其部署到实时服务器时,我在本地开发和实时开发环境中工作正常,这给我带来了问题(客户希望将它们托管在现有托管服务提供商)。

我将网站上传到服务器并更新了数据库配置,就像我之前在我和其他服务器上做过很多次而没有问题。然而,这一次,我被提出:

SilverStripe Framework requires a $databaseConfig defined.

当我从根文件夹中删除.htaccess文件时,该网站出现了,但是,所有网址都是这样的:

www.domain.com/index.php/page_name

经过几次搜索后,我遇到了index.php问题的解决方案;将以下内容添加到我的_config文件

Director::setBaseURL('/');

我这样做了,网址显示正确,但导航到他们会给我404.

我恢复了htaccess文件并将其缩小到此块:

RewriteCond %{REQUEST_URI} ^(.*)$
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !\.php$
    RewriteRule .* framework/main.php?url=%1 [QSA]

当这个到位时,我得到上面提到的数据库配置错误,当它不存在时,我的网址产生404s

有没有人对这里发生的事情有任何见解?我和主持人有很多来回反复,他不是很了解,也无法提供任何建议,而且就这一方面而言,我并不是天才。

2 个答案:

答案 0 :(得分:2)

我假设您使用的是SilverStripe 3.1+,因此Director配置可以/应该放在您的YAML配置文件中(静态将被弃用):

Director:
  alternate_base_url: '/'

虽然这主要有​​助于base_tag的问题。

然而,可以通过添加RewriteBase

来解决主要的ModRewrite问题
RewriteEngine On
RewriteBase '/'

如果不是公共根目录,您可以使用'/'或安装SS文件夹。这通常由SilverStripe安装程序通过检查$base = dirname($_SERVER['SCRIPT_NAME']);和其他一些小事来自动处理。检查install.php5第1483行,您可以使用它来找出你的RewriteBase。

如果这不起作用,请尝试全新安装,而不是将本地安装复制到服务器。

答案 1 :(得分:1)

您是否使用_ss_enviroment.php来定义数据库配置详细信息?我在从SS 2.4迁移到3.1.2的项目中有类似的经历。

在您的网站_config.php

中设置此项
// Use _ss_environment.php file for configuration
//Please note that your system should have a file, _ss_environment.php, with database connectivity data,
require_once("conf/ConfigureFromEnv.php");

global $database;
$database = '';

我希望这会有所帮助