我在codeigniter网址重写时遇到了一些问题。
问题是标准的htaccess重写在这里不起作用。
我希望htaccess改写这个:
http://www.example.com/home/results?date=2017-10-02
要
http://www.example.com/home/results/2017-10-02
感谢您的帮助!
这不起作用:
RewriteRule ^results/([^/]+)$ results?date=$1 [L]
答案 0 :(得分:0)
很简单,你必须在route.php文件中创建路由,不需要重写规则。
$route['home/results/(:any)'] = 'home/results';
这里是用于网址路由的CI官方文档
https://www.codeigniter.com/user_guide/general/routing.html
您需要在.htaccess文件中添加以下规则
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
在此处查看CI网址的工作方式
https://www.codeigniter.com/user_guide/general/urls.html
在CI URL中是数组段,您可以通过在域名后给段号开始为0来获取具有uri类的段,在这里您希望获得段的日期为2
$this->uri->segment(2);
此处为CI uri课程链接,您可以找到更多有用的方法
答案 1 :(得分:0)
您可以使用以下RewriteRule
RewriteEngine on
RewriteCond %{QUERY_STRING} ^date=([0-9]{4}(\-[0-9]{2}){2})$ [NC]
RewriteRule ^home/results$ /home/results/%1? [L]
%1
是从RewriteCond
中的正则表达式中提取第一个组。使用尾随?
,以便查询字符串也不会附加在重写中。
在Apache中,RewriteRule
指令的第一个参数不包含查询字符串,因此必须使用RewriteCond
来检查%{QUERY_STRING}
。
此外,如果您希望它不那么具体,那么您可以只编辑用于匹配查询字符串的正则表达式,它当前非常具体,在该日期必须是查询字符串中的唯一参数,并且它必须是&# 34;(4个数字) - (2个数字) - (2个数字)"。您可以看到正则表达式here的细分。