3

可能重复:
带有 mod_rewrite 的不区分大小写的 URL

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

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

2 回答 2

4

我已经找到了这个问题,它有一个公认的答案(复制如下以供参考):

CheckSpelling on

它似乎与您的情况相同(或足够相似)。

我不确定如何/是否可以将这个问题作为重复项关闭,但值得看看引用的答案是否首先解决了您的问题:)

于 2012-04-20T09:06:03.817 回答
0

*nix 平台上的 apache 网络服务器对 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 和磁盘上的文件名差异的模块(例如 like )扩展您的网络服务器。

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

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

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

于 2012-04-20T08:28:32.387 回答