English 中文(简体)
如何从请求的 URI 中删除版本的前缀, 并使用正确的文档根?
原标题:How to remove version prefix from request URI and use correct document root?

我们需要支持少数大版本和小版本的网络服务, 所以我们决定使用类似 URL 的版本 :

http://service/      # last deployed version of service
http://service/1/    # symlink that points to the last deployed major version 1.x
http://service/1.2/  # symlink that points to the last deployed minor version 1.2.x

我们把所有标签存储在文件夹中, 并制作与正确版本的符号链接 :

Here the root directory for apache:
lrwxr-xr-x   1 xxxx xxxx 28 May 23 15:21 1 -> /home/site/tags/20120523084844-HEAD
lrwxr-xr-x   1 xxxx xxxx 28 Apr 27 15:21 1.1 -> /home/site/tags/20120427152123-HEAD
lrwxr-xr-x   1 xxxx xxxx 28 May 23 08:48 1.2 -> /home/site/tags/20120523084844-HEAD
lrwxr-xr-x   1 xxxx xxxx 28 May 24 16:12 2 -> /home/site/tags/20120524161232-HEAD
(source code here for last deployed version)
.....

这里存在一个问题, 因为我们将会在 PHP 中的 REQUEST_ URI 中拥有版本前缀, 而 Symfony 路由器不会匹配模式 。 我们如何剪切该版本前缀, 但仍然使用特定目录作为文档根?

例如,当我们向 请求 http://service/1.2/some/ handler/patten 时,将使用1.2目录的代码,PHP中的 REQUEST_URI 将 /pos/ handler/pattern

问题回答

尝试此 :

RewriteEngine On
RewriteBase /

RewriteCond $1 !^[0-9.]+/
RewriteRule ^(.*) /1.2/$1 [L]

唯一的想法是,你只能一次测试版本,如果想要不同的版本,则必须更改 htaccess 。

我可以建议使用子域进行版本吗?

这是一个有趣的问题。

我不认为它只能使用 Htaccess, 至少不能没有丑陋的黑客。 REQUEST_ URI 总是持有原始请求, 据我所知, 无法进行编辑( 如果我们试图通过 E=REQUEST_ URI = “ 某事” 来指定变量 REQEST_ URI 的内容, 那么将创建一个名为“ REDIent_ REQEST_ URI ” 的环境变量 。

我不熟悉交友会,所以我不知道编辑处理路由的脚本有多容易。如果它容易,你可以做一些类似的事情。

RewriteRule ^[1-9.]/(.*)$ - [R,QSA,NC,E=HANDLER:$1]

然后在 PHP 中您可以将处理器复制到请求(_uri) :

$_SERVER[ REQUEST_URI ] = $_SERVER[ REDIRECT_HANDLER ];

除了这样更改 PHP 外, 我只能想到这一点: 首先硬性地直接到处理器, 将版本信息放入查询字符串 。 然后抓住该请求, 软性地转到版本/ 手动器 。 请求_ uri 将会被正确设置, 但它丑陋且容易出错 。

尽管如此,我完全同意Gerben关于使用子域进行版本的主张。





相关问题
Using SimplePie with CodeIgniter and XAMPP

I am using CodeIgniter 1.7.2 with XAMPP 1.7.2 on a Windows computer. I am trying to make use of SimplePie. I followed all the instructions I could find: a copy of simplepie.inc is in my applications/...

Multiple Sites with common files

I have developed over 50 sites that all use the exact same files other than CSS and IMAGES, I currently duplicate the files each time I create a new site and upload different css and images. What ...

http server validation

I finish a litle http server, writing from scratch. I would like to be sure that my imlementation is conforme to the HTTP specifications. W3C give us tools for HTML/XML conformance, but i see nothing ...