2017-04-05 12 views
0

私はリダイレクトの量を最小限に抑えて以下を達成しようとしています。.htaccess - wwwを削除し、httpsを強制し、phpを削除して末尾のスラッシュを削除します

  • エンド末尾のスラッシュ

何私がこれまで持って働いていると削除PHP拡張

  • を削除WWW
  • フォースHTTPS
  • を削除します。

    RewriteEngine On 
    
    # REMOVE WWW 
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 
    
    # FORCE HTTPS 
    RewriteCond %{HTTP:X-Forwarded-Proto} !https 
    RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
    
    # REMOVE TRAILING SLASH 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)/$ /$1 [L,R=301] 
    
    # REMOVE PHP EXTENSION 
    RewriteRule ^(.+)\.php$ /$1 [NC,L,R=301] 
    RewriteCond %{REQUEST_FILENAME}.php -f 
    RewriteRule ^(.+)/?$ /$1.php [END] 
    

    現在の行動を:

    http://www.example.com/functions.php -> https://example.com/functions 
    

    (4回のリダイレクトで動作します)

    OR

    http://www.example.com/functions/ -> https://example.com/functions 
    

    (4回のリダイレクトで動作します)

    誰もが最小限のリダイレクトでこの作業を行う方法を任意の提案を持っていますか?

  • +0

    [で動作するように.htaccessファイルを取得する可能性のある重複サブフォルダ](http://stackoverflow.com/questions/27642401/getting-htaccess-file-to-work-in-subfolders) –

    答えて

    1

    いつもhttpsに書き換えてwwwを1ステップで失うことに傷つくことはありません。末尾のスラッシュは変更されていませんが、Condを反転することでphp-extenstionを削除する際に行を失いました。

    # REMOVE WWW & FORCE HTTPS 
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [OR] 
    RewriteCond %{https} off 
    RewriteRule ^(.*)$ https://example.com/$1 [R=301,L] 
    
    # REMOVE TRAILING SLASH 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)/$ /$1 [L,R=301] 
    
    # REMOVE PHP EXTENSION if there's no file with this name 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.+)\.php$ /$1 [NC,L,R=301] 
    

    あなたも.phpなしfile/として要求されたファイルのために取り扱いが必要な場合は、あなたが最後の部分は、あなたのコードにとどまるべきに:

    RewriteRule ^(.+)\.php$ /$1 [NC,L,R=301] 
    RewriteCond %{REQUEST_FILENAME}.php -f 
    RewriteRule ^(.+)/?$ /$1.php [END] 
    
    +0

    wwwとforce httpsのリムーバルを組み合わせた最初の部分が動作します。 extionsionを削除した最後の部分はうまくいきません。しかし、今のところ、私は3つのリダイレクトしか持っていません。 – puntable

    +0

    要求されたファイルが実際に存在しないときに '.php'を削除しますか?リクエストされたURIが 'something.php'で終わっていれば、/ somethingに書き直すという2つのルールがあります。第2に、ファイル名 '.php'が要求され、実際に存在するとき、URIの最後の部分は' .php'で取得され、拡張されます。したがって、短いバージョンはファイルが存在しない場合にのみ '.php'を削除することです。私のルールはまさにそのとおりです:/ RewriteCondは、要求されたファイルが存在しない場合に実行され、 '.php'を取り除きます。 –

    +0

    '%{REQUEST_FILENAME} .php'という名前のファイルがある場合は' .php'を追加した後の部分のみが処理されません。元の質問には含まれていないので、 、あなたは最後のルールセットにとどまるべきです。それに応じて私の答えを編集 –

    関連する問題