【问题标题】:Case-insensitive file check for RewriteCondRewriteCond 的不区分大小写的文件检查
【发布时间】:2016-09-01 13:55:53
【问题描述】:

我有一个 .htaccess 文件,用于测试特定文件并运行 PHP 脚本(如果存在),如果不存在则重定向到另一个网站。

RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/directory/$1 -f
RewriteRule ^(.+\.png)$ process.php?file=$1 [QSA]

RewriteRule ^(.+\.png)$ http://other.website.com/$1

我可以直接运行 PHP 脚本并进行重定向,但这样更快。但是,我需要使RewriteCond 检查不区分大小写。我尝试设置所有标志并启用拼写检查,但无济于事。

RewriteEngine on
CheckSpelling on
RewriteCond %{DOCUMENT_ROOT}/directory/$1 -f [NC]
RewriteRule ^(.+\.png)$ process.php?file=$1 [QSA,NC]

RewriteRule ^(.+\.png)$ http://other.website.com/$1

在 httpd.conf 中启用了拼写模块,.htaccess 文件可以修改所有可能的设置,但它仍然像以前一样工作,如果输入了不同大小写文件名的文件,则不会重定向。

【问题讨论】:

    标签: apache .htaccess mod-rewrite case-insensitive


    【解决方案1】:

    尝试在您的 Apache 配置中使用 tolower 映射。首先,create a map 用于您的 httpd.conf(或 apache2.conf 或 VHost 配置)中的 tolower 调用:

    RewriteMap lc int:tolower
    

    接下来,在您的条件检查中,将$1 转换为小写:

    RewriteEngine on
    RewriteCond %{DOCUMENT_ROOT}/directory/${lc:$1} -f [NC]
    RewriteRule ^(.+\.png)$ process.php?file=$1 [QSA,NC]
    
    RewriteRule ^(.+\.png)$ http://other.website.com/$1
    

    请注意,为使上述操作生效,您的文件应始终使用小写字母。

    【讨论】:

    • 好方法,但是那里已经有很多文件了,有些可能有冲突的名称(仅区分大小写)。我根本无法将它们全部转换为小写。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 2015-06-04
    相关资源
    最近更新 更多