RewriteCondは一致しませんか?

私はいくつかのURLを書き直した記事を読んだが、何も私を助けなかった。

基本的にウェブサイトには「.html」( http://www.domain.com/page.html )で終わるページがあり、他のサブドメインも保持しています( http: //www.domain.com/subdomain.com

So I'm trying to get this: http://www.domain.com/subdomain.com to be redirect to: /www/subdomain.com/index.php

私はこれを試しましたが、それに何か問題があります:

RewriteCond %{QUERY_STRING} !\.html$
RewriteCond %{QUERY_STRING} ^([^/.]+)\.([^/.]+)/?$
RewriteRule /www/%1.%2/index.php [L]

私はRewriteCondの使い方を誤解していると思いますが、それを正しく行う方法を見つけることはできません。 私は何が欠けていますか?

ありがとう、 ロブ

2

1 答え

これは近くにあるはずです:

RewriteCond %{QUERY_STRING} !\.html$
RewriteRule ^([^/.]+)\.([^/.]+)/(.*) /www/$1.$2/index.php?file=$3 [QSA,NC,L]

最後の部分を index.php のクエリ引数として追加しました。


あっ、そういえば:

それだけでは不十分な場合:

2つのヒント:

あなたがあなた自身のサーバであり、あなたが仮想ホストを変更できればホスト環境でない >、 .htaccess ファイルだけでなく、 RewriteLog というディレクティブを使用してみてください。

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

正規表現をチェックする私の好きなツール:

http://www.quanetic.com/Regex (don't forget to choose ereg(POSIX) instead of preg(PCRE)!)

4
追加された
あなたは正しい、編集された=)
追加された 著者 Olivier Pons,
フィードバックありがとう
追加された 著者 Olivier Pons,
REQUEST_FILENAME REQUEST_URI の中には RewriteCond があります。 REQUEST_FILENAME だけでなく、 QUERY_STRING を使用しているため、 REQUEST_URI は尋ねる正しいパラメータではない場合があります。リクエストされたファイルはリダイレクトしたくないものの、リダイレクトする(確かに非常に構築された)URL http://www.domain.com/otherdir?subdomain.com を想像してみてください。リダイレクトを QUERY_STRING に、したがって REQUEST_URI にも含めてください。
追加された 著者 yogibimbi,
バージョン2.4でmod_rewriteのApacheロギングが変更されました。現在: httpd.apache.org/docs/current/mod/mod_rewrite。 html#ロギング
追加された 著者 J. B. Rainsberger,
ありがとう、それは動作します。 2行目以外はCondではなくRewriteRuleでなければなりません。乾杯、ロブ
追加された 著者 reservoirdog1985,
私はそれが動作することに気づいたが、この部分は:RewriteCond%{QUERY_STRING}!\。html $は、RewriteRuleを入力するためにhtmlページを停止しない(Not Found要求されたURL /www/page.html/index.phpが見つかりませんでしたこのサーバー上で)。
追加された 著者 reservoirdog1985,
さて、私はついにそれを得ました。 QUERY_STRINGは '?'の後に渡される変数のリストです。だから私はそれをREQUEST_URIに変更しなければなりませんでした。これは実際に私がチェックしたかったものです
追加された 著者 reservoirdog1985,