.htaccess Silverstripe mod_重写问题(我认为)

.htaccess Silverstripe mod_重写问题(我认为),.htaccess,silverstripe,.htaccess,Silverstripe,我一直在工作的一个站点,在我的本地开发人员和实时开发人员环境中运行良好,当我尝试将其部署到实时服务器(客户端希望使用其现有的托管提供商托管)时,它给我带来了问题 我将网站上传到服务器并更新了数据库配置,就像我以前在我和其他人的服务器上所做的那样,没有任何问题。然而,这一次,我得到了: SilverStripe Framework requires a $databaseConfig defined. 当我从根文件夹中删除.htaccess文件时,网站出现了,但是,所有URL都是这样显示的: w

我一直在工作的一个站点,在我的本地开发人员和实时开发人员环境中运行良好,当我尝试将其部署到实时服务器(客户端希望使用其现有的托管提供商托管)时,它给我带来了问题

我将网站上传到服务器并更新了数据库配置,就像我以前在我和其他人的服务器上所做的那样,没有任何问题。然而,这一次,我得到了:

SilverStripe Framework requires a $databaseConfig defined.
当我从根文件夹中删除.htaccess文件时,网站出现了,但是,所有URL都是这样显示的:

www.domain.com/index.php/page_name
经过几次搜索,我找到了index.php问题的解决方案;将以下内容添加到我的_config文件

Director::setBaseURL('/');
我这样做了,URL显示正确,但是导航到它们会给我一个404

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

RewriteCond %{REQUEST_URI} ^(.*)$
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !\.php$
    RewriteRule .* framework/main.php?url=%1 [QSA]
当这发生时,我得到上面提到的数据库配置错误,当它不存在时,我的URL产生404


有人知道这里会发生什么吗?我和主持人有过很多来往,他不是很有学问,也不能提供任何建议,而且在这方面我也不是天才。

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

尽管这主要有助于解决
base\u标记的问题

然而,主要的ModRewrite问题可以通过添加一个
RewriteBase
来解决:

RewriteEngine On
RewriteBase '/'
您可以使用
“/”
,如果不是公用根目录,则可以使用SS安装在中的文件夹。这通常由SilverStripe安装程序通过检查
$base=dirname($\u SERVER['SCRIPT\u NAME'])自动处理和其他小东西。检查
install.php5
第1483行,您可能可以使用它来确定您的基础


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

是否使用_ss_environment.php定义数据库配置详细信息?我有过类似的经历,比如在一个从SS2.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 = '';
我希望这有帮助

// 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 = '';