【问题标题】:making urls non case sensitive using htaccess [duplicate]使用 htaccess 使 url 不区分大小写 [重复]
【发布时间】:2012-05-01 19:43:12
【问题描述】:

可能重复:
Case Insensitive URLs with mod_rewrite

我必须使网址不区分大小写。这意味着我必须工作 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]

【问题讨论】:

  • 这就是这些重写的用途:每个 URL 都应该转到 index.php - 如果不存在该请求的文件。那么您的实际问题是什么?
  • 我必须使 url 不区分大小写..现在 test.com/About.php 有效,但 test.com/about.php 无效。它显示索引页面

标签: php .htaccess url


【解决方案1】:

我后来找到了this question,它有一个可接受的答案(复制如下以供参考):

CheckSpelling on

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

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

【讨论】:

    【解决方案2】:

    *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 和磁盘上的文件名差异。

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

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

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

    【讨论】:

    • 我必须让每一页都不区分大小写..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 2011-10-14
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多