我的应用只有两个页面呈现给用户,包括移动设备或桌面设备。首先是登录页面,然后是应用程序页面本身。当访问www.myapp.com
时,首先将用户索引到登录页面,如果他已登录,则将其重定向到应用程序页面。这是我的服务器架构:
root
index.php (login page)
mobile/mobile.php
profile/profile.php
我想要的是避免用户www.myapp.com/mobile/mobile.php
,www.myapp.com/profile/profile.php
而是www.myapp.com
和www.myapp.com/desktop
或www.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;
}
它应该是这样的还是应该是另一种完整的方式? 我想在我的服务器中执行此操作,而不是在用户设备中执行此操作... 非常感谢您的帮助......
答案 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;
}
}
它使用index
和try_files
来查找您的脚本,然后在内部重定向到fastcgi
处理程序。我在其他地方定义了upstream php { ... }
。您可以使用重写规则和internal
指令来强制URL栏上没有php脚本的方案。
移动重写只是为了保持与桌面重写的一致性,以便客户端看不到尾随/
。
这只是众多解决方案的一个例子。通常,还有辅助文件(css,js,images)及其URL也需要适应。