我试图慢慢接管现有网站,按路线路线。我发现Apache的Alias(Match)
似乎允许我为每个请求设置不同的(内容)文档根目录。但我没有使用尾随斜杠和更复杂的路径。
我现在的目标是让旧网站按照惯例提供服务。要建立一个新网站,提供第一个特定请求,请说/foo
和/foo/*
。
我的vhost设置如下:
<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
:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ index.php/$1 [L]
index.php
的节目&#39; old&#39;或者&#39; new&#39;取决于他们的目录。
我测试的不同路线会发生什么:
example.com/bar
时,会显示“旧”字样。example.com/foo
时,它会重定向/foo/
,然后显示“&#39; new&#39;。example.com/foo/bar
时,会显示“旧”字样。我不希望将/foo
强制重定向到/foo/
。我希望/foo/bar
能够展示新的&#39;。
我一直关注Apache's mod_alias
获取多个AliasMatch
指令,以便在/foo
之后捕获任何内容,但显然这些指令无法正常工作。此外,我不会在那里读到任何神奇地添加的尾部斜线。
任何人都知道魔术?
答案 0 :(得分:0)
我已经能够通过调整Alias直接指向index.php来解决这个问题:
AliasMatch ^/foo/(.*)$ /www/new/index.php
AliasMatch ^/foo$ /www/new/index.php
然后/bar
以及其他任何内容都会转到旧网站,/foo
,/foo/
和/foo/bar
会转到新网站。
此方法有两个缺点:
.htaccess
。但是,由于我主要使用它来让index.php接收每条路线,所以现在很好。example.com/frontend/app.css
+ Alias /frontend /www/new/public_html/frontend
。