url路由问题

https://www.bilibili.com/video/av13470008/
https://www.youtube.com/watch?v=7PTLxfIgyBs

像是这种url没有指向某个php的链接的话,需要怎么做才能做到像上面两个链接那样

阅读 3.4k
4 个回答

可以使用Apache或Nginx的URL rewrite功能, 如:

Apache

Laravel 框架通过 public/.htaccess 文件来让 URL 不需要 index.php 即可访问。在 Apache 启用 Laravel 之前,请确认是否有开启 mod_rewrite 模块,以便 .htaccess 文件发挥作用。

如果 Laravel 附带的 .htaccess 文件在 Apache 中无法使用的话,请尝试下方的做法:

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

Nginx

如果你使用 Nginx ,在你的网站配置中加入下述代码将会转发所有的请求到 index.php 前端控制器。

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

当然如果你使用了 Homestead 或者 Valet 的话, 它会自动的帮你设置好优雅链接。

然后再使用一个好的框架,比如Laravel,来解析路径中的参数。参见:http://d.laravel-china.org/do...

如果你不是使用框架,那么你需要做的是,解析 url,然后进行处理,当然逻辑都要自己写,服务器什么也不会帮你。入口文件一定是有一个的,只不过可能被服务器的配置默认了。去看看框架源码吧少年!

如果你使用的开发框架自带路由功能,配置路由即可,比如laravel框架,直接配置路由参数即可。如果是自己写的几个简单的脚本,或者没有路由功能的框架,用nginx、apache等做伪静态也就是rewrite

laravel路由demo:

Route::get('user/{name}', function ($name) {
    //
})->where('name', '[A-Za-z]+');

Route::get('user/{id}', function ($id) {
    //
})->where('id', '[0-9]+');

Route::get('user/{id}/{name}', function ($id, $name) {
    //
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
// 这个地址, 因为有尾/, 所以猜是一个目录, 试了下, 果然
https://www.bilibili.com/video/av13470008/

// 和上面路径一样.
https://www.bilibili.com/video/av13470008/index.html
// 这个如果用的是nginx, apache的话, 那就是url重写了.
https://www.youtube.com/watch?v=7PTLxfIgyBs
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题