2016-10-10 29 views
1

私はfile.phpmydomain.com/fileと書いてあります。私はmydomain.com/FILEと書くこともできるようにする必要があります。このルールは、それはあなた次第ですchanged-する必要がある場合は.htaccessの大文字と小文字を区別しないディレクトリ

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /$1 [L,R=301] 

RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^(.+?)/?$ /$1.php [L] 

# redirect to .php-less link if requested directly 
RewriteCond %{THE_REQUEST} ^[A-Z]+\s.+\.php\sHTTP/.+ 
RewriteRule ^(.+)\.php $1 [R=301,L] 

は、.htaccessファイルでは、私は拡張子を削除するには、次の規則を使用します。 [NC]フラグの

+0

それはプライベートネットワークにあります:

RewriteMap lc int:tolower 

次に、あなたの.htaccessの内側には、すべて大文字のURIを小文字に追加のルールを持っています。私はユーザーの間違いを最小限にする必要があります。 –

+0

ファイルを小文字にして、 'RewriteMap'を使って各URLを小文字に変換します。 (Apacheサーバーの設定にアクセスする必要があります) – anubhava

+0

ファイルは小文字です。 configでどの変更を行う必要がありますか?RewriteMapはどのように使うべきですか? Answerフォームで書くことができますので、正しい場合は記入することができますか? –

答えて

1

Apacheやvhost設定でこのRewriteMapを定義します。

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /$1 [L,R=301,NE] 

# redirect to .php-less link if requested directly 
RewriteCond %{THE_REQUEST} ^[A-Z]+\s.+\.php\sHTTP [NC] 
RewriteRule ^(.+)\.php$ /$1 [R=301,L,NC,NE] 

# convert each REQUEST_URI to lowercase 
RewriteRule ^(.*?[A-Z]+.*)$ /${lc:$1} [R=301,L,NE] 

# internally add .php 
RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^(.+?)/?$ $1.php [L] 
+0

.htaccessに「RewriteMap lc int:tolower」と書かなければなりませんか?私は明日それをチェックし、書きます。ありがとう! –

+1

いいえ、 'RewriteMap lc int:tolower'は' httpd.con'またはあなたのvhostの設定に置く必要があります。 .htaccessから 'RewriteMap'は許可されていません – anubhava

-1

使用[NC]あなたのルール内のフラグ

使用してのRewriteRuleが 大文字と小文字を区別しないように一致させます。つまり、一致したURIの中に大文字または小文字の文字が表示されるかどうかは考慮されません。

https://httpd.apache.org/docs/current/rewrite/flags.html

+1

これは '$ 1'が異なるリクエストに対して異なるトークンに置き換えられるので、単独では機能しません。 – arkascha

+0

はい、それは動作しません。 –

-1

あなたは側面の世話をする必要があります:最初の大文字小文字を区別しないマッチングと小文字の2番目のケース変換。

Apacheの書き換えモジュールは、第一及び第二のものに多少複雑なアプローチをNCフラグが用意されています

RewriteEngine On 

# remove trailing slash (/) if no such folder exists 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /${lc:$1} [NC,L,R=301] 

# internally rewrite to a php script if it exists and convert to lower case 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.+)$ /${lc:$1}.php [NC,L] 

# redirect to .php-less link if requested directly 
RewriteRule ^(.+)\.php$ ${lc:$1} [NC,L,R=301] 

私は書き換えルールの元のセットが本当に何を達成していないという印象かかわらを持っていますあなたがしようとすると、それは構文的にも無効です。それが私がいくつかの側面を変えた理由です。

+0

これは動作しません。あなたはこれを達成する別の方法を提案するかもしれません。 –

+0

@ TarlanMammadzada _what_はうまく動作しません_why_?それとも単純に "仮定"していますか? – arkascha

+0

私はチェックしました。小文字であっても内部エラーが発生します –

関連する問題