如何使用日期重写Codeigniter中的URL

时间:2017-08-25 19:54:30

标签: php .htaccess codeigniter mod-rewrite url-rewriting

我在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]

2 个答案:

答案 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课程链接,您可以找到更多有用的方法

https://www.codeigniter.com/user_guide/libraries/uri.html

答案 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的细分。