我在代码点火器URL重写方面遇到了一些问题。
问题是标准 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]
您可以使用以下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
指令的第一个参数不包含查询字符串,因此必须使用检查%{QUERY_STRING}
RewriteCond
。
此外,如果您希望它不那么具体,那么您可以编辑用于匹配查询字符串的正则表达式,它目前非常具体,因为该日期必须是查询字符串中的唯一参数,并且它必须是"(4 个数字(-(2 个数字(-(2 个数字("。您可以在此处查看正则表达式的细分。
很简单,你必须在路由中创建路由.php文件不需要制定重写规则。
$route['home/results/(:any)'] = 'home/results';
这是 CI 用于 URL 路由
的官方文档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 URL 的工作原理
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