使用htaccess使URL不区分大小写

3

这就是重写的用途:每个URL都应该进入index.php - 如果请求文件不存在的话。那么你的真正问题是什么呢? - hakre
我必须使url不区分大小写。现在,http://www.test.com/About.php可以使用,但http://www.test.com/about.php不能使用。它显示索引页面。 - asitha
2个回答

4

我后来发现了这个问题,它有一个已接受的答案(下面是参考复制的):

CheckSpelling on

这似乎和您的情况相同或足够相似。

我不确定如何/是否可以将此问题标记为重复,但值得先查看引用答案是否解决了您的问题 :)


0

在*nix平台上,Apache Web服务器对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)扩展你的Web服务器感兴趣,这些模块可以处理URL和磁盘上文件名之间的差异。

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

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

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


我必须使每个页面不区分大小写。 - asitha
@asitha:如果你没有在 Apache 上安装 mod_spelling 模块,那么可以使用 PHP 变种。 - hakre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接