在 RH7 和 Apache 下可以使用区分大小写的 URL 吗?

在 RH7 和 Apache 下可以使用区分大小写的 URL 吗?

更新于 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>

相关内容