首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按请求路径使用Apache拆分DocumentRoot

问按请求路径使用Apache拆分DocumentRoot
EN

Stack Overflow用户
提问于 2016-05-01 08:08:11
回答 1查看 398关注 0票数 0

我试图慢慢接管一个现有的网站,每条路线的路线。我找到了Apache的Alias(Match),它似乎允许我为每个请求设置不同的(内容)文档根。但我在后面的斜线和更复杂的道路上失败了。

我现在的目标是让旧网站服务一切,因为它是过去的。并且有一个新的网站,服务于第一个特定的请求,比如/foo和/foo/*。

我的vhost设置如下:

代码语言:javascript
复制
<VirtualHost *:80>
    ServerName example.com
    UseCanonicalName on

    AliasMatch ^/foo/(.*)$ /www/new/$1
    AliasMatch ^/foo$ /www/new/$1
    <Directory /www/new/>
        Options +FollowSymLinks -MultiViews
        AllowOverride All
        Require all granted
    </Directory>

    DocumentRoot /www/old
    <Directory /www/old/>
        Options +FollowSymLinks -MultiViews
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

在这两个目录中,我都有一个.htaccess:

代码语言:javascript
复制
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ index.php/$1 [L]

index.php的节目“旧”或“新”取决于它们的目录。

我测试的不同路线发生了什么:

  • 当请求example.com/bar时,它显示“旧”。
  • 当请求example.com/foo时,它也会重定向/foo/,然后显示“新”。
  • 当请求example.com/foo/bar时,它显示“旧”。

我不想强迫/foo重定向到/foo/。我想让/foo/bar展示“新”。

我一直在跟踪mod_alias,以获得多个AliasMatch指令,以便在/foo之后捕获任何内容,但很明显,这是不正确的。另外,我没有读到任何关于拖尾斜杠被神奇地添加的内容。

有人知道魔术吗?

EN

回答 1

Stack Overflow用户

发布于 2016-05-15 10:46:35

我可以通过调整别名来直接指向index.php来解决这个问题:

代码语言:javascript
复制
AliasMatch ^/foo/(.*)$ /www/new/index.php
AliasMatch ^/foo$ /www/new/index.php

然后,/bar和其他任何东西都进入旧网站,而/foo、/foo/和/foo/bar则进入新网站。

这种方法有两个缺点:

  • 新网站中的.htaccess被完全跳过。但是,由于我主要使用它来让index.php选择每一条路线,所以现在还可以。
  • 像css/js这样的前端资源会转到旧网站上。用另一个简单的别名:example.com/frontend/app.css + Alias /frontend /www/new/public_html/frontend修复这个问题。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36964483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档