2012-01-06 4 views
2

私は式エンジンでサイトの一部をhttpsにする必要があります。このサイトでは、新しいドメイン名(新しいドメイン名www.example-new.com、古いドメイン名www.example.old.com)も使用しています。htaccessのhttpsとルールの順番(Expression Engineを使用)

、私は次のことをしたい:

  1. はwww.example.old.com/extranet
  2. リダイレクトを開始
  3. 力WWWに任意のURLの
  4. 力HTTPSをindex.phpをを削除www.example.old.com/extranet以外のhttps URL(例:www.example.old.com/newsからhttp

これまでのところ、最初の二つの要件のための作品:

<IfModule mod_rewrite.c> 
RewriteEngine On 
# Force www 
RewriteCond %{HTTP_HOST} ^example-new.com$ [NC] 
RewriteRule ^(.*)$ http://www.example-new.com/$1 [R=301,L] 

# Removes index.php 
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php/$1 [L] 

</IfModule> 
AddType x-httpd-php53 .php 

私はサークルでラウンドに行くように見えるので、私は私が他の書き換え(提案を共有すること自由に感じが...)を書くのを助ける二つの質問しました:

1)要件3と4のコードを「index.phpを削除する」コードの前に配置する必要がありますか?

2)位置は、古いサイトからのリダイレクトに影響しますか? www.example-old.com/some-link-here.aspは

おかげで、

グレゴール

+1

アプリケーションを保護するには、書き換えルールに頼らないでください.HTTPSを使用する必要がある部分が最初に「https://」リンクとしてリンクされていることを確認してください。すべての書き換えられたリクエストはHTTPSで2回目に行われる前に(POSTコンテンツなどを含む)平らなHTTPで行われることを覚えておいてください。 – Bruno

答えて

0
をwww.example-new.com/some-new-link-hereにリダイレクトされます

1)要件3と4のコードを「index.phpを削除する」コードの前に配置する必要がありますか?

ルールは、記述した順序で処理されます。サイトが最初にリダイレクトされてから削除インデックスを実行することを期待していますので、先に進む必要があります。

2)この位置は、古いサイトからのリダイレクトに関係していますか。 www.example-old.com/some-link-here.aspはwww.example-new.com/some-new-link-hereにリダイレクトされます

両方のサイトで同じディレクトリを使用している場合1つのサイトのすべてのルールの前に、ドメインを制限するRewriteCondを付ける必要があります。それ以外の場合は、ルールの順序(古いサイトと新しいサイト)が重要です。

古いサイトからのリダイレクトにも、新しいサイトに新しいルールが組み込まれている必要があります。追加のリダイレクトを避けるために必要に応じてhttp/sに行ってください。以下は

は、HTTP/S

#if not secure 
RewriteCond %{HTTPS} off 
#and starts with /extranet 
RewriteCond %{REQUEST_URI} ^/extranet [NC] 
#redirect to secure 
RewriteRule . https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

#if secure 
RewriteCond %{HTTPS} on 
#and does not start with /extranet 
RewriteCond %{REQUEST_URI} !^/extranet [NC] 
#redirect to http 
RewriteRule . http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
3

1)削除「のインデックスを強制するためのコードです。/エクストラネット

RewriteCond %{HTTPS} off 
RewriteCond %{REQUEST_URI} ^/extranet(.*)$ [NC] 
RewriteRule . https://%{HTTP_HOST}%{REQUEST_URI}$1 [R=301,L] 

4)で始まるすべてのURIのために//:phpのすべてのURI

RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

3)強制httpsにWWWを '」ExpressionEngine URLs

RewriteCond $1 !\.(gif|jpe?g|png)$ [NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php/$1 [L] 

2)からは、追加します' https://リダイレクトする/エクストラネットではないURI

RewriteCond %{HTTPS} on 
RewriteCond %{REQUEST_URI} !^/extranet(.*)$ [NC] 
RewriteRule . http://%{HTTP_HOST}%{REQUEST_URI}$1 [R=301,L] 
0一緒にすべてを置くが

、ここRewriteRulesのあなたの完全なセットです:それは助けている場合、私はちょうどeコマースサイトのために、この昨日やった...

<IfModule mod_rewrite.c> 
    Options +FollowSymlinks 
    RewriteEngine on 

    RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC] 
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

    RewriteCond %{HTTPS} off 
    RewriteCond %{REQUEST_URI} ^/extranet(.*)$ [NC] 
    RewriteRule . https://%{HTTP_HOST}%{REQUEST_URI}$1 [R=301,L] 

    RewriteCond %{HTTPS} on 
    RewriteCond %{REQUEST_URI} !^/extranet(.*)$ [NC] 
    RewriteRule . http://%{HTTP_HOST}%{REQUEST_URI}$1 [R=301,L] 

    RewriteCond $1 !\.(gif|jpe?g|png)$ [NC] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ /index.php/$1 [L] 
</IfModule> 
+0

'%{REQUEST_URI}'の後に '$ 1'を削除する必要があると思います。また、 'https:// example.com/extranet'は' https:// www.example.com/extranet'にリダイレクトされません。 – Gerben

+0

'%{REQUEST_URI}'の後の '$ 1'は、'/extranet/login'のようなURIの照合のための保護手段です。そうしないとApacheは301を送信する代わりに404を投げます。 – rjb

+0

RewriteRulesはすべて修正されました。 isseは大文字と小文字の区別の結果であり、一部のサーバでは 'On/Off'が許可されているのに対し、' on/off'(厳密には小文字)が期待されるサーバもあります。 – rjb

0
# force www on hostname, but keep same protocol (http/https) 
RewriteCond %{HTTP_HOST} !^www\.(.+) 
RewriteCond %{HTTPS}s ^(on(s)|offs) 
RewriteRule^http%2://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
0

...ここに私の.htaccessですファイル

# Remove WWW from URL 
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L] 

# Add a trailing slash to paths without an extension 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 
RewriteCond %{REQUEST_METHOD} !=POST 
RewriteRule ^(.*)$ $1/ [L,R=301] 

#remove index.php 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php/$1 

#Force HTTPS on checkout/account pages 
RewriteCond %{HTTPS} off 
RewriteCond %{REQUEST_URI} (checkout|account) 
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] 

#remove HTTPS on all other pages 
RewriteCond %{HTTPS} on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(img|_|images|checkout|account) 
RewriteRule ^(.*)$ http://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] 
関連する問題