php - 使用“#”作为路径参数的 CodeIgniter URI 路由
问题描述
我有一个Home.php
控制器和terms
方法。我有一个这样的网址:https://www.example.com/terms
它工作正常。
我的routes.php
:
$route['default_controller'] = 'home';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;
$route['terms'] = 'home/terms';
现在,我需要将 url 更改为:https://www.example.com/#/terms
注意中间的“#”。
我尝试将其添加到路线中,但没有奏效:
$route['#/terms'] = 'home/terms';
当我打开时,上面的更改显示主页https://www.example.com/#/terms
$config['permitted_uri_chars']
但是,如果我将提到的任何其他允许的字符conifg.php
放在 # 的位置,那么它可以正常工作:
$route['a/terms'] = 'home/terms'; // this works: https://www.example.com/a/terms
$route['2/terms'] = 'home/terms'; //this works: https://www.example.com/2/terms
我还添加了 # ,$config['permitted_uri_chars']
但这也没有用。只显示主页。
另外,谁能解释一下为什么 # 没有像其他字符一样被对待permitted_uri_chars
?
控制器是Home.php
,方法是terms()
。使用 CodeIgniter 版本 3.1.11
谢谢你!
编辑:
我需要知道是否可以使用 Codeigniter 的路由来实现它?或者也许一些使用.htaccess 的重写规则?
解决方案
这是由 Web 浏览器引起的,而不是 CodeIgniter。Web 浏览器将 URL 中的 # 及其后的任何内容视为对 # 部分之前的 URL 所指向的网页上的元素的引用。
因此对于 URL https://example.com/#page1,网络浏览器将向https://example.com/发出请求,然后在网页上查找 ID 为 page1 的元素。
如果您希望通过在 URL 中使用“#”来加载不同的页面,则可以使用 Angular 等前端框架来完成。检查 Angular 的路由功能,了解它如何使浏览器在 # 之后为不同的 URI 路径加载不同的视图。
推荐阅读
- plotly - R Plotly 图例过滤器
- python-3.x - 实现 Django 密码历史的正确方法是什么?
- python - Python Tkinter:如何通过一次删除父小部件来删除所有子小部件?
- flutter - 在 WebView Flutter 中按 ID 查找元素
- laravel - Laravel - 如何验证公司 ID 的唯一部门名称
- javascript - 使用 puppeteer 在属性“VALUE”中设置数据
- c# - 在 WPF 中提取和操作 MediaElement 播放的音频
- python - 如何在 mac 上下载 discord.py 和 python
- javascript - 这个函数如何计算从线起点到交叉点的距离?
- mysql - 复制失败,错误代码:1032;Last_Error:无法在表上执行 Update_rows_v1 事件