我正在使用CodeIgniter构建PHP应用程序。它类似于Let Me Google That For You
,您可以在其中将一个句子写入文本输入框,单击“提交”,然后您将转到显示结果的URL。我希望URL是人类可编辑的,而且相对简单。我已经了解了CodeIgniter URL路由,所以现在我的URL看起来像这样:
http://website.com/?q=this+is+a+normal+url
现在的问题是当句子包含一个特殊字符,如问号或反斜杠时。这两个都与我当前的.htaccess
重写规则混乱,甚至在编码字符时也会发生。
http://website.com/?q=this+is+a+normal+url? OR
http://website.com/?q=this+is+a+normal+url%3F
什么是双重编码。例如,如果我采用问号,并将其编码为%253F
(其中?编码为%3F,%符号编码为%25)。这个网址正常工作。
http://website.com/?q=this+is+a+normal+url%253F
有谁知道我能在这做什么?有没有一种聪明的方法可以对输入进行双重编码?我可以写一个.htaccess
重写规则来解决这个问题吗?我在这里不知所措。以下是我目前正在为每个人使用的重写规则。
RewriteEngine on
RewriteCond %{QUERY_STRING} ^q=(.*)$
RewriteRule ^(.*)$ /index.php/app/create/%{QUERY_STRING}? [L]
注意:CodeIgniter的工作方式是他们设置了index/application/function/parameter
网址。我现在正在为函数提供完整的查询字符串。
答案 0 :(得分:1)
如果您使用的是Apache 2.2及更高版本,则可以使用B flag强制转发反向引用:
RewriteCond %{QUERY_STRING} ^q=.*
RewriteRule ^ /index.php/app/create/%0? [L,B]
答案 1 :(得分:0)
我通常会像这样做人类可读的网址
$humanReadableUrl= implode("_",preg_split('/\W+/', trim($input), -1, PREG_SPLIT_NO_EMPTY));
它将删除任何非单词字符,并在单词
之间添加下划线