设想:
我有一个http://www.example.com/我希望我的新项目可以通过以下方式访问http://www.example.com/new。
以下是我尝试过的:
DocumentRoot /var/www/html/old/public/
Alias /new "/var/www/html/old/new/public/" # -> I tried
问题是它只适用于http://www.example.com/new但如果我访问另一个页面http://www.example.com/new/page1它正在寻找旧项目中的路由。
.htaccess在文档根目录上
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
这是 Nginx 版本,不幸的是,我使用的服务器是 Apache,所以我需要将其转换为 Apache vhost
location ^~ /new {
alias "/var/www/html/old/new/public/";
if (!-e $request_filename) {
rewrite ^/(.*) /new/index.php?$query_string last;
}
try_files $uri $uri/ /index.php?$query_string;
location ~ \.php$ {
fastcgi_split_path_info ^(.+?\.php)(/.*)?$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
答案1
从手册中Alias
指示
/请注意,如果您在 URL 路径中包含尾随,则服务器将需要尾随/以扩展别名。也就是说,如果您使用
Alias "/icons/" "/usr/local/apache/icons/"
那么 URL /icons 将不会被别名,因为它缺少尾随/的如果在 URL 路径中省略了斜杠,则在文件路径中也必须省略它。
因此,您/当前的设置要么太少,要么太多……
尝试
Alias /new /var/www/html/old/new/public
或者
Alias /new/ /var/www/html/old/new/public/