让 .htaccess 动态获取 RewriteBase

让 .htaccess 动态获取 RewriteBase

根据我安装文件集的位置,RewriteBase如果我将其安装在子目录中而不是 www 根目录中,似乎必须相应地进行更改。

对于我的配置文件,我使用类似下面的方法允许管理员更改设置以适合他们的部署环境。

$yaml = file_exists($yamldir) ? Spyc::YAMLLoad($yamldir) : array();
$default = array(
  'hostname' => 'mydomain.com',
  'base_uri' => '/sub/',
  'mysql_host' => 'localhost',
  'mysql_username' => 'root',
  'mysql_password' => '',
  'schema_name' => 'schema1',
  'table_name' => 'table1'
);

$config = array_merge($default, $yaml);

然后,SVN 或 git 会忽略 config.yml,以实现最大灵活性。这似乎是最好的方法。

.htaccess 文件是否有等效项,用于读取(或更好的是,解析)可能存在或不存在的配置文件?

背景信息

在这种情况下,我的 .htaccess 需求非常简单:

RewriteEngine On
RewriteBase /sub

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ index.php [L]

如果我使用 Rails 风格的公共目录而不是有效“开放”的 www 根目录,那可能是最好的选择,但我可以根据需要处理这个问题。在我的例子中,RewriteBase 是否必要?我不确定。即便如此,我可以想到将来我有一个更复杂的 .htaccess 的情况,在这种情况下,我将很难找到 RewriteBase 的解决方法(或者我这样想也是错的?)

答案1

您可能应该使用自定义脚本来进行重写: http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritemap - 外部重写程序

相关内容