更新于 2017 年 8 月 23 日,请参阅下文
我想在 Apache 访问声明的目录之前使 RedHat 7 下的 URL 不区分大小写。
我尝试了 mod_rewrite 和 mod_speling。它们都没有用。我知道 Linux 是区分大小写的操作系统。
我的目标是使 API 的 URL 区分大小写。我已经声明了 httpd 的最低设置,只要它运行即可。我还添加了特定任务或设置所需的模块。
我该怎么办?或者更好的办法是:请向我解释一下这是如何实现的,或者为什么它不起作用?
2017 年 8 月 23 日更新
当我像这样调用 API 时,出现 403(禁止)错误,并显示以下消息:我没有权限访问服务器上的 /API/v1/:
https://servername/API/v1
以下是 Apache(httpd)设置的摘录:
## Rewriting URLs
# The URL rewrite engine switch
RewriteEngine On
# The rewrite map for certain parameters like function()
RewriteMap lowercase int:tolower
# Make all HTTP request to lowercase
<If "%{REQUEST_URI} =~ m#[A-Z]#">
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule (.*) ${lowercase:$1} [L]
</If>
# Make all HTTP request to HTTPS
<If "%{HTTPS} == 'off'">
RewriteCond %{HTTPS} off [NC]
RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI} [R=301,NC,L]
</If>
## Directory Access
# Deny access Serverroot - Never delete this!
<Directory />
Require all denied
AllowOverride None
Options None
</Directory>
# Allow documents to be served from the DocumentRoot
<Directory "/path/to/my/api/v1">
Require all granted
DirectoryIndex index.php
Options +Indexes +FollowSymLinks
</Directory>
答案1
只需将所有 URL 都改为小写即可。通过重定向到小写字母,任何大写字母都会转换为小写字母。通过不允许使用任何大写字母并透明地将 URL 更改为全部小写,使其不区分大小写。
Apache.htaccess
代码:
<IfModule mod_rewrite.c>
RewriteMap lc int:tolower
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule ^(.*)$ ${lc:$1} [R=301,L]
</IfModule>