1

次のような書き換えルールがあります。

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule (?!^(cms|images|js|mobile)(/.*|)$)^.*$ page.php [NC,L]

これは期待どおりに機能します。ファイルが存在しない場合は、一般的なページであり、カスタムURLのページを許可するpage.phpに転送します。

また、wwwを強制したいと思います。ドメインの前に:example.com-> www.example.com

そのために、私たちは以下を使用します:

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

これも機能しますが、2つが一緒に機能することになっている場合:

example.com/non-existent-file

最終的に次のようになります。

www.example.bom/page.php

これはデフォルトで404ページになります。これらのルールを変更して連携させるにはどうすればよいですか?いくつかの異なる十分な文字で遊んでみました(つまり、両方のルールを処理するために[NC、L]のLを削除しました)。

また、wwwリダイレクトの下にあるpage.phpへの転送を繰り返して(そしてLサフィックスを削除して)成功しませんでした。

HTACCESSファイル全体は次のようになります。

Options +FollowSymLinks
RewriteEngine On
RewriteBase   /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule (?!^(cms|images|js|mobile)(/.*|)$)^.*$ page.php [NC,L]

RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule ^(.*)$ http://www.example.com/$1 [R=302,L]

また、現在のドメインを表すexample.comの代わりに使用できる%{CONSTANT}はありますか?

4

1 に答える 1

1

探している定数は %{HTTP_HOST} HTTPリクエストによって提供されるものです。%{SERVER_NAME}おそらく、仮想ホストのデフォルトのサーバー名の変数を探してい ますか?

ホスト名チェックルールを最初に配置RewriteCondし、page.phpルールでaを使用して、ドメインがすでに正しい場合にのみ適用します。

RewriteEngine On
# First rewrite the domain
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

# Then rewrite the files
# At this point, the domain should already have been enforced
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule (?!^(cms|images|js|mobile)(/.*|)$)^.*$ page.php [NC,L]
于 2012-10-29T16:46:48.443 に答える