2017-02-05 4 views
1

私の要件は、書き換えマップファイルにurlが存在するかどうかをチェックすることです。存在していない場合は、ステータスコード404uriがrewritemapに存在するかどうかを確認する他のgoto 404ページですか?

でカスタム404ページが表示されるはずですもともとこのコードは目的を果たし:

RewriteMap plp-map dbm:${http.server.install.base}/dynamicmaps/plp-map 
RewriteCond %{REQUEST_URI} ^/en/home/categories/.* 
RewriteRule ^(.*) ${plp-map:$1|/content/mysite/en_ca/home/errors/404.html} [PT,QSA] 

それは/invalid.htmlのカスタム404ページをロードしました。しかし、ステータスは200でした。次に、mapに存在しない場合は、goto ErrorDocumentとしてルールを作成しました。そうでなければリダイレクトします。以下のように:

RewriteCond %{REQUEST_URI} ^/en/home/categories/.* 
RewriteMap plp-map dbm:${http.server.install.base}/dynamicmaps/plp-map 
RewriteCond ${plp-map:$1} ="" 
RewriteRule .? - [S=2] 
    RewriteCond %{REQUEST_URI} ^/en/home/categories/.* 
    RewriteRule ^(.*) ${plp-map:$1} [PT,QSA]  
    RewriteRule .? - [S=1] 
RewriteRule ^(.*)$ - [L,R=404] 
ErrorDocument 404 /content/homedepot_ca/en_ca/home/errors/404.html 

今、このルールは、三行目のRewriteCond $ {PLP-マップ:$ 1}で失敗しているエラー

で "" =
map lookup FAILED: map=plp-map[dbm] key= 

ない$ 1は常にURLを返すべきでしょうか?どういうわけか私は、URLを条件チェックの地図エントリに渡すための部分を欠いています。これを修正するには?また、私の問題のためのより良い解決策がありますか?

答えて

1

いいえ、$1はURLを返しません。現在のRewriteRule正規表現で取り込まれた最初のグループの結果を返します。

マップで実際にURLを変更しているのですか、それともテストするだけですか?それは単なるテストだ場合、あなたが必要なのは、次のとおりです。

RewriteMap plp-map dbm:${http.server.install.base}/dynamicmaps/plp-map 
ErrorDocument 404 /content/homedepot_ca/en_ca/home/errors/404.html 

RewriteCond ${plp-map:$1} ="" 
RewriteRule ^(/en/home/categories/.*)$ - [R=404,L] 

あなたもそれを変更する場合は、上記の後にこれを追加します。

RewriteCond ${plp-map:$1} !="" 
RewriteRule ^(/en/home/categories/.*)$ ${plp-map:$1} [PT,QSA] 
+0

あー...これは私の問題を解決し、などのルールを簡素化よくどうも。 –

関連する問題