php网站路由问题

发布于 2022-09-05 22:05:05 字数 1132 浏览 25 评论 0

我想给我博客蓝翟红尘的分类和文章自定义路由(不希望看到id数字,只希望全是英文字符)。
目前分类路由我是这样设置的:
1.先将c=a&m=b?id=x的路径变为c/m/id/x.html形式
2.然后用如下代码替换成新的路由

$reg_match_from = array(
         '/^index\/index\.html$/',
         '/^mood\/index\.html$/',
         '/^blog\/index\.html$/',
        '/^blog\/dtl\/id\/(\d+)\.html$/',
        '/^blog\/cate\/id\/1.html$/',
        '/^blog\/cate\/id\/2.html$/',
        '/^blog\/cate\/id\/3.html$/',
        '/^blog\/cate\/id\/4.html$/'
        );
    $reg_match_to = array(
        '',
        'mood',
        'blog/life',
        'blog/\\1.html',
        'blog/life',
        'blog/yuyou-story',
        'blog/plant',
        'blog/talk'
    );

3.再在服务器里rewrite规则里写如下规则:

rewrite ^/blog/life$ /store/index.php?c=blog&m=cate&id=1;
rewrite ^/blog/yuyou-story$ /store/index.php?c=blog&m=cate&id=2;
...

如上每天加一个分类,我都要去手工改代码和服务器router rewrite规则。要给博客文章实现如此需求,肯定不可取。
目前自己想到的方法是,后台创建文章时,将新的路由存储到数据库,然后路由分发时,再根据路由匹配数据库,生成c=a&m=b?id=x形式的路由,再进行分发,但感觉我这种想法很不靠谱。

望大神指点迷津。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

居里长安 2022-09-12 22:05:05

我来回答你这个问题,首先不知道你这个框架是什么,但是,正常的框架应该是这样子:

  1. 有一个框架全局配置;
  2. 框架根据路由自动解析参数;

例如如下这个伪静态路由:

http://www.example.com/blog/detail/id/1.html

那么前面的blogdetail应该解析出来对应的分别是Blog控制器和detail方法;
然后再来说后面的id/1.html那么,这个.html应该忽略掉;
然后解析出来就是一个$_GET数组,也就是变成:

$_GET = ['id' => 1];

这种形式;也就是后面就是键值对的参数,那么你就可以:

$id = $_GET['id'];

然后根据这个$id去查找数据,不过一般框架底层也封装了一层数据获取接口,如ThinkPHPI()方法,Yii2的yii::$app->request->get()等等。
所以来说,应该有一个全局通用配置,不要每篇文章都做一个路由配置,那么你就可以类似于这样子:

http://www.example.com/blog/detail/id/zhe-shi-yi-pian-ce-shi-bo-ke.html

也就是此时的id并不是你数据库对应的真实的自增id,而应该是你自己对你的博客名进行拼音翻译后得到的结果。
那么你也就需要对你博客翻译后的拼音用一个字段存到数据库,如pinyin_title字段,然后那么就是查询的话根据这个字段的值为$_GET['id']来取数据。

所以,从另外一个方面来看,你需要在存储的时候把你的标题名翻译成拼音,所以你还需要找一个拼音翻译的PHP程序,网上有很多我就不贴了。

她比我温柔 2022-09-12 22:05:05

既然能在WEB中有生成路由,不能再反解URI?nginx到PHP只是一个URI.具体到PHP怎么处理这个URI.规则都自己规定好了?

实在没办法的话,不想改动太大,用PHP生成重写文件,在这个站的server下包含这个文件,然后shell跑个死循环监听这个文件.一发生改变.立马做nginx平滑重启 /usr/nginx/sbin/nginx -s reload.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文