我试图慢慢接管一个现有的网站,每条路线的路线。我找到了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的节目“旧”或“新”取决于它们的目录。
我测试的不同路线发生了什么:
example.com/bar时,它显示“旧”。example.com/foo时,它也会重定向/foo/,然后显示“新”。example.com/foo/bar时,它显示“旧”。我不想强迫/foo重定向到/foo/。我想让/foo/bar展示“新”。
我一直在跟踪mod_alias,以获得多个AliasMatch指令,以便在/foo之后捕获任何内容,但很明显,这是不正确的。另外,我没有读到任何关于拖尾斜杠被神奇地添加的内容。
有人知道魔术吗?
发布于 2016-05-15 10:46:35
我可以通过调整别名来直接指向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修复这个问题。https://stackoverflow.com/questions/36964483
复制相似问题