使用htaccess使url不区分大小写

时间:2012-04-20 08:12:23

标签: php .htaccess url

  

可能重复:
  Case Insensitive URLs with mod_rewrite

我必须使网址不区分大小写。这意味着我必须工作http://www.test.com/About.phphttp://www.test.com/about.php .. 我尝试了以下代码。但它不起作用。它显示了索引page.ie,它显示了索引页面的内容

 #Options +FollowSymlinks
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?q=$1 [L,QSA,NC]

2 个答案:

答案 0 :(得分:4)

我已找到this question,其中有一个已接受的答案(复制如下以供参考):

CheckSpelling on

它似乎与你的情况相同(或类似)。

我不确定我是否可以将此问题视为重复,但如果引用的答案首先解决您的问题,那么值得一看:)

答案 1 :(得分:0)

* nix平台上的apache webserver与URL区分大小写,* nix文件系统也已区分大小写。

因此,不支持在apache配置中尝试执行的操作。

如果您只有一些文件,您也可以将规则硬编码到.htaccess中,或者开始创建重写地图:

RewriteRule ^about.php$ About.php [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA,NC]

您可能对使用模块(例如mod_spelling)扩展您的网络服务器感兴趣,这些模块可以处理URL和磁盘之间的文件名差异。

另一种选择是您在index.php内检查所请求文件的小写版本$_GET['q'],如果存在,则include以及return之后:

$basename = strtolower(basename(realpath($_GET['q'])));
if (is_file($path = __DIR__ . '/' . $basename)) {
    include($path);
    return;
}

与实际文件系统进行比较的方式取决于您的具体需求和解决策略。