Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据URL路径更改Apache中的DocumentRoot_Apache - Fatal编程技术网

根据URL路径更改Apache中的DocumentRoot

根据URL路径更改Apache中的DocumentRoot,apache,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.com,而api.example

我正在重做我的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.com
,而
api.example.com/v2/
指向
/var/www/html/api-v2.example.com

[经过编辑,我最初说的是子目录,我认为这让人困惑,但我真的希望它们是完全独立的网站]

使用Apache可以做到这一点吗

附加问题:如果我没有使用
/v1/
/v2/
等,而是使用如下接受标头对API进行版本控制:

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

如何将其映射到其他目录?

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

/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

当然有可能,到底是什么问题?与
v1
并行创建
v2
,这样就可以了。我可能不理解这个问题。:-)我不会在API版本中使用HTTP头,这会使您和使用API的人更难实现。在URL中指定版本非常好。请参阅我的编辑;我想我真的希望他们作为单独的网站,有单独的基本目录。并且api.example.com/method将使用最新版本的api进行响应。大概我需要一些其他东西来支持HTTP_ACCEPT版本?@Apemantus我不这么认为,当它被重写为
/v1/
/v2/
或其他任何东西时,别名应该从那里开始处理它。否则,您也可以通过在方括号中添加
R
标志来执行重定向:
[L,R]