php网站路由问题
我想给我博客蓝翟红尘的分类和文章自定义路由(不希望看到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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我来回答你这个问题,首先不知道你这个框架是什么,但是,正常的框架应该是这样子:
例如如下这个伪静态路由:
那么前面的
blog
和detail
应该解析出来对应的分别是Blog控制器和detail方法;然后再来说后面的
id/1.html
那么,这个.html
应该忽略掉;然后解析出来就是一个
$_GET
数组,也就是变成:这种形式;也就是后面就是键值对的参数,那么你就可以:
然后根据这个$id去查找数据,不过一般框架底层也封装了一层数据获取接口,如
ThinkPHP
的I()
方法,Yii2的yii::$app->request->get()
等等。所以来说,应该有一个全局通用配置,不要每篇文章都做一个路由配置,那么你就可以类似于这样子:
也就是此时的id并不是你数据库对应的真实的自增id,而应该是你自己对你的博客名进行拼音翻译后得到的结果。
那么你也就需要对你博客翻译后的拼音用一个字段存到数据库,如
pinyin_title
字段,然后那么就是查询的话根据这个字段的值为$_GET['id']来取数据。所以,从另外一个方面来看,你需要在存储的时候把你的标题名翻译成拼音,所以你还需要找一个拼音翻译的PHP程序,网上有很多我就不贴了。
既然能在WEB中有生成路由,不能再反解URI?nginx到PHP只是一个URI.具体到PHP怎么处理这个URI.规则都自己规定好了?
实在没办法的话,不想改动太大,用PHP生成重写文件,在这个站的server下包含这个文件,然后shell跑个死循环监听这个文件.一发生改变.立马做nginx平滑重启 /usr/nginx/sbin/nginx -s reload.