【问题标题】:How do I make URLs case insensitive in Linux server如何在 Linux 服务器中使 URL 不区分大小写
【发布时间】:2013-01-26 16:32:25
【问题描述】:

我正在开发一个部署在 Linux 服务器上的网站。我对此有一些小的改动。我有文件夹read。要求是,如果我输入 URL localhost:80/tom/Read../READ/read,它需要导航到 read 文件夹内的 read.php

我在根目录下创建了一个文件 .htaccess。通过查看页面mentioned here

,将以下代码放在文件中
RewriteEngine On
RewriteBase /tom/

RewriteMap  lc int:tolower
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule (.*) ${lc:$1} [R=301,L]

RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

RewriteRule ![A-Z] - [S=26]
RewriteRule ^(.*)(A)(.*)$ $1a$3 [N,R=301]
RewriteRule ^(.*)(B)(.*)$ $1b$3 [N,R=301]
RewriteRule ^(.*)(C)(.*)$ $1c$3 [N,R=301]
RewriteRule ^(.*)(D)(.*)$ $1d$3 [N,R=301]
RewriteRule ^(.*)(E)(.*)$ $1e$3 [N,R=301]
RewriteRule ^(.*)(F)(.*)$ $1f$3 [N,R=301]
RewriteRule ^(.*)(G)(.*)$ $1g$3 [N,R=301]
RewriteRule ^(.*)(H)(.*)$ $1h$3 [N,R=301]
RewriteRule ^(.*)(I)(.*)$ $1i$3 [N,R=301]
RewriteRule ^(.*)(J)(.*)$ $1j$3 [N,R=301]
RewriteRule ^(.*)(K)(.*)$ $1k$3 [N,R=301]
RewriteRule ^(.*)(L)(.*)$ $1l$3 [N,R=301]
RewriteRule ^(.*)(M)(.*)$ $1m$3 [N,R=301]
RewriteRule ^(.*)(N)(.*)$ $1n$3 [N,R=301]
RewriteRule ^(.*)(O)(.*)$ $1o$3 [N,R=301]
RewriteRule ^(.*)(P)(.*)$ $1p$3 [N,R=301]
RewriteRule ^(.*)(Q)(.*)$ $1q$3 [N,R=301]
RewriteRule ^(.*)(R)(.*)$ $1r$3 [N,R=301]
RewriteRule ^(.*)(S)(.*)$ $1s$3 [N,R=301]
RewriteRule ^(.*)(T)(.*)$ $1t$3 [N,R=301]
RewriteRule ^(.*)(U)(.*)$ $1u$3 [N,R=301]
RewriteRule ^(.*)(V)(.*)$ $1v$3 [N,R=301]
RewriteRule ^(.*)(W)(.*)$ $1w$3 [N,R=301]
RewriteRule ^(.*)(X)(.*)$ $1x$3 [N,R=301]
RewriteRule ^(.*)(Y)(.*)$ $1y$3 [N,R=301]
RewriteRule ^(.*)(Z)(.*)$ $1z$3 [N,R=301]

但它不起作用。

我是 Linux 环境的新手。我不知道 mod_speling。那是一个文件吗?它将位于 Linux 服务器的哪个位置?

【问题讨论】:

  • 我会质疑这里的规范。这会导致更多问题,例如机器人索引。
  • 是的,需求本身很可能是个问题。也就是说,有一个 Apache 模块可以提供帮助(它可以处理有点偏离的请求,并提供替代方案......我忘记了名字)编辑:它是 MultiViews
  • 嗨dystroy..我是php新手。我只是在谷歌上搜索解决方案并如上所述写..如果你有解决方案,请告诉我..

标签: apache .htaccess mod-rewrite mod-speling


【解决方案1】:

您可以使用 mod_speling 模块轻松让 apache 网络服务器忽略大小写,该模块是标准 apache 发行版的一部分:

CheckSpelling On
CheckCaseOnly On

重启httpd后,你可以以ReadREADread访问read

【讨论】:

  • 嗨 Hoeni .. 我将上面的 2 行代码放在 .htaccess 中,并带有已经存在的代码。然后重新启动。它不工作。任何建议
  • 我想知道使用它时是否有任何性能考虑。我有一个有这个问题的大型 Sencha 应用程序。 390MB 大小写混合的文件,并在整个过程中以不同方式引用..
  • 只有我一个人对拼写检查模块拼写错误感到讽刺吗?
  • 是的,它有性能问题,但它是一个快速修复blog.servergrove.com/2010/08/24/…
【解决方案2】:

嗨,我终于找到了解决方案。将下面的代码放在/etc/httpd/conf/httpd.conf

LoadModule speling_module modules/mod_speling.so

<IfModule mod_speling.c>
  CheckSpelling On
  CheckCaseOnly On
</IfModule>

然后重启httpd:

sudo service httpd restart

最后验证它是否已启用:

sudo httpd -M | grep speling

这应该产生speling_module (shared)

感谢大家的帮助..

【讨论】:

  • IfModule 指令应该没有任何区别,因为它只是为了在您加载模块时避免错误。 (httpd.apache.org/docs/2.4/mod/core.html#ifmodule)。如果没有它有错误,则根本不会加载 mod_speling 模块。
  • speling 模块在 Debian 上似乎没有默认启用(可能 Ubuntu 也是如此)。要启用它,请使用命令sudo a2enmod speling
  • 我认为模块拼写错误真是太棒了。
  • 伟大而有效的答案!
  • 所有在这里打字的人都不知道 mod 拼写不能与 mod rewrite 一起使用 ...
【解决方案3】:

首先安装speling_module。 然后在 httpd.conf 文件中包含 LoadModule speling_module modules/mod_speling.so 然后包含

<IfModule mod_speling.c>
     CheckSpelling On
     CheckCaseOnly On
</IfModule>
在 httpd.conf 中,然后使用 service httpd restart 命令重新启动 httpd 服务。

【讨论】:

  • 所有在这里打字的人都不知道 mod 拼写不能与 mod rewrite 一起使用 ...
【解决方案4】:

您好,不确定这是否有帮助,但这是我使用过的简单方法,它使用一个非常基本的 php 页面,但它适用于我需要它的网站。

将此代码放在 htaccess 文件中

 AddType application/x-httpd-php .html .htm
 ErrorDocument 404 /404.php

然后我创建了一个带有以下内容的 php 文件..

 <?php
 $aurl = $_SERVER['REQUEST_URI'];
 $lurl = strtolower($aurl);

 if($aurl != $lurl){
header('location:'.$lurl);
 } else {
header('location:/404.html');
 }
 ?>

基本上它获取引用 url -> 存储为 $aurl

然后将其变为小写 -> 存储为 $lurl

如果它们不匹配,则尝试显示小写 url ($lurl)

如果失败,页面不存在,引用 url 现在是相同的 ( $lurl == $aurl ) 因此它会重定向到正确的 404 页面或者可以显示一些额外的代码..

【讨论】:

  • 为什么是} else { header('location:/404.html'); }?如果$aurl == $lurl,不应该让它不被重定向吗?
猜你喜欢
  • 2013-01-26
  • 2015-08-27
  • 2011-10-14
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-20
  • 2011-04-04
相关资源
最近更新 更多