2011-06-29 12 views
1

複数のmod_rewriteの質問を調べようとしましたので、重複しているとお詫びします。301リダイレクトの末尾にスラッシュが付きます

domain.com/about.phpに移動すると.phpが削除され、domain.com/aboutに行くとそのように残るように設定しようとしています。だから、

Options +FollowSymlinks 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ /$1.php [L,QSA] 
RewriteRule ^(.*)/$ /$1 [L,R=301] 

、今あなたがdomain.com/aboutに行く場合には、ページが表示されますが、domain.com/about.phpに行く場合には、拡張子を削除しません。

また、私は301リダイレクト持って完璧に動作しますが、ユーザーは末尾のスラッシュでdomain.com/our-clients/に行く場合は、それらが向けられている

redirect 301 /our-clients http://www.domain.com/about-ourclients 

について、ourclients.php

ルールを書き直す方法についてのアドバイスはありますか?

答えて

2

これは、ジョブを実行する必要があります。

Options +FollowSymlinks 
RewriteEngine On 
RewriteBase/

# remove .php ONLY if requested directly 
RewriteCond %{THE_REQUEST} (\.php\sHTTP/1) 
RewriteRule ^(.+)\.php$ /$1 [R=301,L,QSA] 

# remove trailing slash ONLY if it is not an existing folder 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /$1 [L,R=301] 

# rewrite to FILENAME.php if such file does exist and is not a folder 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ /$1.php [L,QSA] 
    これは、ファイルをPHPにすべての直接の要求をリダイレクトします
  1. :要求されたリソースである場合は/something.phpは、最後のスラッシュを削除します/something

  2. にリダイレクトされますディレクトリではありません。したがって、/home/をリクエストしてそのようなフォルダがある場合は、/homeにリダイレクトされません。

  3. 存在する場合、同じ名前のPHPファイルにリクエストを内部的に書き換えます。​​を要求していて、/about.phpがある場合は書き換えを行います。 /about.phpがない場合は、何も起こりません(少なくとも、これらのルールにはない - ルールがもっとあれば、そのようなリクエストは後で一致するか、404エラーページが表示されます)。

  4. ​​をご依頼の場合、/about.phpがあり、​​フォルダーがある場合は、リクエストがフォルダーに移動します。これが発生しないようにするには(​​は常に/about.phpに書き換えてください)、最後のブロックからRewriteCond %{REQUEST_FILENAME} !-dを削除する必要があります。しかし、あなたが現在の.htaccessとまったく同じ条件を持っているので、それは望ましい動作だと思います。

+0

完璧に動作します。本当にありがとう! – brianrhea

関連する問題