使用Codeigniter 3处理尾部斜杠

时间:2016-04-10 00:26:21

标签: php codeigniter trailing-slash

我有一个文章数据库,网址如下:

person/albert-einstein/(尾随斜线)

person/albert-einstein/1(没有尾随斜线)

我想知道在Codeigniter 3中处理url尾随斜杠的最佳方法是什么?

这是我到目前为止所做的/测试:

echo site_url('person/albert-einstein/'); # http://localhost/person/albert-einstein                              
echo base_url('person/albert-einstein/'); # http://localhost/person/albert-einstein                              
echo site_url('person/albert-einstein/1'); # http://localhost/person/albert-einstein/1                 
echo base_url('person/albert-einstein/1'); # http://localhost/person/albert-einstein/1

然后我编辑了config.php来设置:

$config['url_suffix'] = '/';

再次打印网址:

echo site_url('person/albert-einstein/'); # http://localhost/person/albert-einstein/                              
echo base_url('person/albert-einstein/'); # http://localhost/person/albert-einstein                              
echo site_url('person/albert-einstein/1'); # http://localhost/person/albert-einstein/1/            
echo base_url('person/albert-einstein/1'); # http://localhost/person/albert-einstein/1

现在我可以选择site_url()base_url()来打印带有斜杠或不带斜线的网址。但是现在根据我的观点,我必须非常小心我使用哪一个,而且我宁愿使用一个尊重我传递的url的函数,如果它有或不添加一个,如果它没有,则返回斜杠有它。

是的,我绝对可以扩展帮助程序并编写一个类似于print_url()的函数来执行我想要的操作,但我想知道是否有一些我在这里缺少的东西。谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用apache重写规则强制尾随斜杠:

RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]

要删除尾部斜杠,您可以使用:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [R=301,L]

我使用了.htaccess|__WEB-INF |___ spring |__app-config.xml |___ views |__footer.jsp |__header.jsp |__home.jsp |__layout.jsp |__menu.jsp |___ tiles.xml |___ web.xml 代码段。