根据页面 URL 更改 Apache DocumentRoot

根据页面 URL 更改 Apache DocumentRoot

设想:

我有一个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/

相关内容