根据URL路径更改Apache中的DocumentRoot

时间:2013-09-19 09:37:12

标签: apache

我正在重做我的API。幸运的是,它的版本。好极了!但是处理新代码的最佳方法是什么。

基本上;我有api.example.com/v1/method等。我的网站在apache上运行,api.example.com指向/var/www/html/api.example.com

对于新的API,我将使用完全不同的框架和代码库等,所以我不想混淆文件。

理想情况下,我想要的是api.example.com/v1/指向/var/www/html/api-v1.example.comapi.example.com/v2/指向/var/www/html/api-v2.example.com

[编辑,我最初说的子目录,我觉得很混乱,但实际上我认为我希望它们是完全独立的网站]

这可以使用Apache吗?

其他问题:如果不是使用/v1/ /v2/等,而是使用Accept标头对我的API进行版本化,例如:

Accept: application/vnd.api-example-com-v2+json

我如何将其映射到不同的目录?

1 个答案:

答案 0 :(得分:1)

如果您将文档根目录设置为

,那就没问题
/var/www/html/api.example.com

然后在文档根目录中包含目录/v1//v2/。至于接受标题。您可以使用mod_rewrite匹配:

RewriteEngine On

RewriteCond %{HTTP_ACCEPT} application/vnd.api-example-com-(.*)\+json
RewriteCond %1::$1 !^(.*)::\1
RewriteRule ^(.*)$ /%1/$1 [L]

如果这是您想要的,那么您需要在vhost / server配置中创建一些别名:

AliasMatch ^/v([0-9]+)/(.*)$  /var/www/html/api-v$1.example.com/$2