2

これは、次の質問のフォローアップのようなものです: .htaccess - "www." を強制する方法 一般的な方法で?

私はこのルールを持っています:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

そして、それらをその回答で提供されたものとマージしたいと思います:

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

これらは正しい結果 (正しい順序とルール) ですか?

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

これまでのところ、すべてが期待どおりに機能していますが、すべてのテストは実際のドメインではなく、一時的な URL で行われました。

ありがとう!

4

1 に答える 1

1

これらのルールは、あなたが探していることを行うはずですが、少し微調整します。あなたが持っているものは機能するので、これはすべて私の好みに基づいた単なる提案です. :)

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php/$1 [L]
</IfModule>

ルールではないすべての Rewrite オプションを最初に記述した方が読みやすいと思います。また、空白行を追加するのも好きなので、ある一連のルールがどこで終わり、次のルールが始まるかを簡単に確認できます。

このルールは不要です。RewriteRule ^index\.php$ - [L]次のルールは、実際のファイルにマップされていない URI の要求にのみ影響を与えるためです。index.php はファイルシステムに存在するため、次のルールはトリガーされません。

index.php ルールの場合、/$1 を追加すると、リクエストが $_SERVER['PATH_INFO'] で利用できるようになります。これは、コードの記述方法によっては役立ちます。これは絶対に必要というわけではありませんが、WordPress や CodeIgniter などのアプリケーションがこのアプローチを提案することはかなり一般的であるため、言及する価値があると思いました。

于 2012-10-20T20:40:41.443 に答える