Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在CodeIgniter站点中重写为不区分大小写的URL?_Url_Mod Rewrite_Case Sensitive_Codeigniter 2 - Fatal编程技术网

在CodeIgniter站点中重写为不区分大小写的URL?

在CodeIgniter站点中重写为不区分大小写的URL?,url,mod-rewrite,case-sensitive,codeigniter-2,Url,Mod Rewrite,Case Sensitive,Codeigniter 2,我正在为一个web应用程序使用CodeIgniter,现在我有一个紧迫的问题:我刚刚发现URL在基于Linux的服务器中是区分大小写的,我刚刚将一个站点从Windows移动到Linux。这意味着网站的链接不再有效,因为现在有了以前没有的所有小写URL 通过谷歌搜索,我发现您应该能够在.htaccess文件中执行类似操作: RewriteMap lc int:tolower RewriteCond %{REQUEST_URI} [A-Z] RewriteRule (.*) ${lc:$1} [R

我正在为一个web应用程序使用CodeIgniter,现在我有一个紧迫的问题:我刚刚发现URL在基于Linux的服务器中是区分大小写的,我刚刚将一个站点从Windows移动到Linux。这意味着网站的链接不再有效,因为现在有了以前没有的所有小写URL

通过谷歌搜索,我发现您应该能够在.htaccess文件中执行类似操作:

RewriteMap  lc int:tolower
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule (.*) ${lc:$1} [R=301,L]
但是我试过了,结果一点都不好。。。!突然,我看到一个丑陋的错误页面,它盯着我看,说Tomcat服务器肯定出了什么问题或者类似的问题。不用说,我立即删除了这些行

但是为什么那时它不起作用,我应该怎么做呢


任何帮助都将不胜感激。

事实上,他们发现这很容易,惊讶于没有人回答这个问题(也许这不是正确的方式,但我认为是这样的……):

我刚刚在config文件夹的routes.php文件中添加了一些路由:

$route['About/Contact']=“About/Contact”


等等…

Code igniter支持正则表达式-如果您希望在路由定义中明确,请以不区分大小写的方式定义它们:

$route['(?i)(about\/contact)'] = 'about/contact';

如果需要不区分大小写的路由,请执行以下对URI.php的更改

文件位置:
system/core/URI.php


查找
$this->\u parse\u request\u uri(),并将其替换为strtolower($this->\u parse\u request\u uri())

这不是一个很好的解决方案,因为您正在为同一路由密钥的每个外壳创建多个路由。这就是为什么建议使用modrewrite来处理它-这样无论请求中使用的大小写如何,您的路由都可以表达一次。这里,显示的url是用户键入的名称。我想要的是路由应该不区分大小写,显示的url应该区分大小写。我可以这样做吗?在我的代码片段中,赋值的左侧处理请求的大小写不敏感。分配的右侧指定请求将路由到的URL。因此,在任何情况下,对about/contact的请求都将以小写形式路由到about/contact。我认为您应该尝试在所需的大小写中指定路由URL。它应该会起作用。