2017-11-23 23 views
3

私のWebサイトをHTTPからHTTPSにアップグレードしたばかりです。以前は完全に機能していた.htaccessが今や不思議な動作をしています。私はそこに次のようにありますhttpsリダイレクトの.htaccessの問題

...プラス、他のPHP拡張モジュールを取り外して、私はこれらの問題のものです推測末尾のスラッシュ

  • を削除します。私は取得しています

    行動が、例のページで、以下のとおりです。

    明らかなものがありませんか?コードは次のとおりです。この特定の問題については

    Order Deny,Allow 
    
    DirectoryIndex index.php 
    
    # Secure text files 
    <Files ~ "\.txt$"> 
        Order allow,deny 
        Deny from all 
    </Files> 
    
    # Redirect non-www to www: 
    RewriteCond %{HTTP_HOST} !^www\. [NC] 
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 
    
    ErrorDocument 404 /404.php 
    
    RewriteEngine On 
    
    # All calls go to SSL 
    RewriteEngine On 
    RewriteCond %{ENV:HTTPS} !=on 
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 
    
    # Unless directory, remove trailing slash 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^([^/]+)/$ https://www.navanter.com/$1 [R=301,L] 
    
    # Redirect external .php requests to extensionless url 
    RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/ 
    RewriteRule ^(.+)\.php$ https://www.navanter.com/$1 [R=301,L] 
    
    # Resolve .php file for extensionless php urls 
    RewriteRule ^([^/.]+)$ $1.php [L] 
    
  • 答えて

    0

    、末尾/.php拡張子を除去するために、あなたの書き換えルールは、代わりに、完全なURLを必要はありません。また、これらのルールの一部を並べ替えることを検討することもできます。ここで注意すべきカップルの事

    Require all granted 
    
    DirectoryIndex index.php 
    
    # Secure text files 
    <Files ~ "\.txt$"> 
        Require all denied 
    </Files> 
    
    ErrorDocument 404 /404.php 
    
    RewriteEngine On 
    
    # Redirect HTTP to HTTPS and non-www to www 
    RewriteCond %{HTTPS} off [OR] 
    RewriteCond %{HTTP_HOST} !^www\. [NC] 
    RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] 
    RewriteRule^https://www.%1%{REQUEST_URI} [R=301,L] 
    
    # Unless directory, remove trailing slash 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.+)/$ /$1 [R=301,L] 
    
    # Redirect external .php requests to extensionless url 
    RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC] 
    RewriteRule^/%1 [NC,R=301,L] 
    
    # Resolve .php file for extensionless php urls 
    RewriteCond %{REQUEST_FILENAME}.php -f 
    RewriteRule ^(.+)$ /$1.php [NC,L] 
    

    • は、上記のディレクティブはRewriteEngine onディレクティブが前に来る必要があります
    • 更新apacheの2.4構文を使用するように変更された

      は例を更新しましたその他の書き換え規則

    • HTTP -> HTTPSおよびnon-www -> wwwリダイレクトロジックは1回の操作で実行できます
    • PHPの拡張ストリッピングとそれに続くリマッピングは、あなたが観察した重複動作を回避するために完全なURLなしで行う必要があります。この最後のビットは問題を解決するはずです。

    ここで使用されている構文の詳細については、mod_rewriteのドキュメントを参照してください。

    +0

    ありがとう、エディ - それは素晴らしいです!よい一週間を! – Neil

    関連する問題