名称服务器始终位于nginx的url栏中的顶部(没有重定向)

时间:2015-11-28 17:50:21

标签: php nginx

我的应用只有两个页面呈现给用户,包括移动设备或桌面设备。首先是登录页面,然后是应用程序页面本身。当访问www.myapp.com时,首先将用户索引到登录页面,如果他已登录,则将其重定向到应用程序页面。这是我的服务器架构:

root index.php (login page) mobile/mobile.php profile/profile.php

我想要的是避免用户www.myapp.com/mobile/mobile.phpwww.myapp.com/profile/profile.php而是www.myapp.comwww.myapp.com/desktopwww.myapp.com/mobile 所以他也可以在布局之间切换。不幸的是,这在我的服务器中引发了404错误:

nginx默认文件

 location ~ /mobile/mobile.php$ {
    rewrite $host/mobile break;
 }   

 location ~ /index.php$ {
    rewrite $host break;
 }   

 location ~ profile/profile.php$ {
    rewrite $host/desktop break;
 }   

它应该是这样的还是应该是另一种完整的方式? 我想在我的服务器中执行此操作,而不是在用户设备中执行此操作... 非常感谢您的帮助......

1 个答案:

答案 0 :(得分:0)

在我的开发服务器上测试了以下内容:

server {
    listen  80;
    root /usr/local/www/test;
    index index.php;

    location = /mobile { rewrite ^ /mobile/; }
    location = /desktop { rewrite ^ /profile/; }

    location / {
        try_files $uri $uri/ =404;
    }
    location /mobile {
        index mobile.php;
        try_files $uri $uri/ =404;
    }
    location /profile {
        index profile.php;
        try_files $uri $uri/ =404;
    }
    location ~ \.php$ {
        include         fastcgi_params;
        fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass    php;
    }   
}

它使用indextry_files来查找您的脚本,然后在内部重定向到fastcgi处理程序。我在其他地方定义了upstream php { ... }。您可以使用重写规则和internal指令来强制URL栏上没有php脚本的方案。

移动重写只是为了保持与桌面重写的一致性,以便客户端看不到尾随/

这只是众多解决方案的一个例子。通常,还有辅助文件(css,js,images)及其URL也需要适应。