0

2つのmod_rewriteルールを1つに組み合わせる必要があります。

1)CMSには、Web上のすべてのクエリを処理するindex.phpがあります。たとえば、URIがdomain.com/query-stringの場合、index.phpは必要な部分を呼び出し/インクルードし、コンテンツを表示します。私はこれを行います:

RewriteCond %{REQUEST_URI} !\.[[:alnum:]]+$
RewriteRule ^([^*]+) index.php [L,QSA] 

2)HTTP301でリダイレクトする必要があります永久にwwwを非wwwに移動しました。たとえば、www.domain.comからdomain.comへ。私はこれを行います:

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

しかし、これらのルールを両方ともhtaccessファイルに入れると、動作が停止し、Webリダイレクトにあるすべてのリンクがindex.phpを実行してホームページを表示します。そのため、これら2つのルールを1つにまとめる必要があります。

.htaccessの最初は次のとおりです。

RewriteEngine On
RewriteBase /

解決策はありますか、それを行う方法はありますか?

.htaccess全体:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} !\.[[:alnum:]]+$
RewriteRule ^([^*]+) index.php [L,QSA]

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

ルールを並べ替えようとしましたが、解決策がありません。

どうもありがとう。

4

1 に答える 1

1

これが正しい順序です。これまでに提供された情報に基づいて、これが機能しない理由はわかりません(ここではテストマシンで機能します)。それでも機能しない場合は、別のルールがどこかにある可能性があります (または、PHP アプリでリダイレクトが行われています)。

RewriteEngine On
RewriteBase /

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

RewriteCond %{REQUEST_URI} !\.[[:alnum:]]+$
RewriteRule ^([^*]+) index.php [L,QSA]

ところで%{HTTP_HOST}、正規表現 (パターンが で始まる) と一致する場合は、^ドットをエスケープすることをお勧めします。これは、状況によっては大きな違いが生じる可能性があるためです (おそらくあなたの場合ではないかもしれませんが、ドットは「任意の文字」を意味するため) -- ^www\.domain\.com. または、正規表現の代わりにプレーン文字列比較を使用します。=www.domain.com

于 2012-05-28T13:54:14.820 に答える