web-dev-qa-db-ja.com

LinuxサーバーでURLの大文字と小文字を区別しないようにする方法

LinuxサーバーにデプロイされているWebサイトを使用しています。その上で行うべき小さな変更があります。フォルダreadがあります。要件は、URLを入力するとlocalhost:80/tom/Readまたは../READまたは/readに移動する必要があるread.phpreadフォルダー内。

ルートディレクトリの下に.htaccessファイルを作成しました。ページを参照して、ファイル内に以下のコードを配置しました ここで言及

RewriteEngine On
RewriteBase /tom/

RewriteMap  lc int:tolower
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule (.*) ${lc:$1} [R=301,L]

RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

RewriteRule ![A-Z] - [S=26]
RewriteRule ^(.*)(A)(.*)$ $1a$3 [N,R=301]
RewriteRule ^(.*)(B)(.*)$ $1b$3 [N,R=301]
RewriteRule ^(.*)(C)(.*)$ $1c$3 [N,R=301]
RewriteRule ^(.*)(D)(.*)$ $1d$3 [N,R=301]
RewriteRule ^(.*)(E)(.*)$ $1e$3 [N,R=301]
RewriteRule ^(.*)(F)(.*)$ $1f$3 [N,R=301]
RewriteRule ^(.*)(G)(.*)$ $1g$3 [N,R=301]
RewriteRule ^(.*)(H)(.*)$ $1h$3 [N,R=301]
RewriteRule ^(.*)(I)(.*)$ $1i$3 [N,R=301]
RewriteRule ^(.*)(J)(.*)$ $1j$3 [N,R=301]
RewriteRule ^(.*)(K)(.*)$ $1k$3 [N,R=301]
RewriteRule ^(.*)(L)(.*)$ $1l$3 [N,R=301]
RewriteRule ^(.*)(M)(.*)$ $1m$3 [N,R=301]
RewriteRule ^(.*)(N)(.*)$ $1n$3 [N,R=301]
RewriteRule ^(.*)(O)(.*)$ $1o$3 [N,R=301]
RewriteRule ^(.*)(P)(.*)$ $1p$3 [N,R=301]
RewriteRule ^(.*)(Q)(.*)$ $1q$3 [N,R=301]
RewriteRule ^(.*)(R)(.*)$ $1r$3 [N,R=301]
RewriteRule ^(.*)(S)(.*)$ $1s$3 [N,R=301]
RewriteRule ^(.*)(T)(.*)$ $1t$3 [N,R=301]
RewriteRule ^(.*)(U)(.*)$ $1u$3 [N,R=301]
RewriteRule ^(.*)(V)(.*)$ $1v$3 [N,R=301]
RewriteRule ^(.*)(W)(.*)$ $1w$3 [N,R=301]
RewriteRule ^(.*)(X)(.*)$ $1x$3 [N,R=301]
RewriteRule ^(.*)(Y)(.*)$ $1y$3 [N,R=301]
RewriteRule ^(.*)(Z)(.*)$ $1z$3 [N,R=301]

しかし、それは機能していません。

Linux環境は初めてです。 mod_spelingについては知りません。それはファイルですか? Linuxサーバーのどこに配置されますか?

17
sonorita

標準のApacheディストリビューションの一部である mod_speling モジュールを使用すると、Apache Webサーバーで大文字と小文字を簡単に無視できます。

CheckSpelling On
CheckCaseOnly On

Httpdを再起動した後、readまたはReadまたはREADとしてreadにアクセスできます。

30
hoeni

やあ、私はついに解決策を得た。以下のコードを_/etc/httpd/conf/httpd.conf_に配置しました。

_LoadModule speling_module modules/mod_speling.so

<IfModule mod_speling.c>
  CheckSpelling On
  CheckCaseOnly On
</IfModule>
_

次に、httpdを再起動します。

_Sudo service httpd restart
_

最後に、有効になっていることを確認します。

_Sudo httpd -M | grep speling
_

それはspeling_module (shared)をもたらすはずです

すべての人に助けてくれてありがとう。

27
sonorita

こんにちは、これが役立つかどうかはわかりませんが、これは私が使用した単純な回避策であり、非常に基本的なPHPページを使用しますが、必要なサイトでは機能します。

このコードをhtaccessファイルに配置します

 AddType application/x-httpd-php .html .htm
 ErrorDocument 404 /404.php

その後、次のようなphpファイルを作成しました。

 <?php
 $aurl = $_SERVER['REQUEST_URI'];
 $lurl = strtolower($aurl);

 if($aurl != $lurl){
header('location:'.$lurl);
 } else {
header('location:/404.html');
 }
 ?>

基本的に、参照URLを取得します-> $ aurlとして保存します

その後、小文字にします-> $ lurlとして保存します

一致していない場合は、小文字のURL($ lurl)を表示しようとします

それが失敗した場合、ページが存在しない場合、参照URLは同じ($ lurl == $ aurl)であるため、適切な404ページにリダイレクトするか、追加のコードを表示できます。

1
South Coast Web