0

ここでトリッキーなものを入手しましたが、転送用のPHPコントローラーファイルの必要性を回避できると思います。次のシーケンスがない場合にヒットするURLがexample.com/あり、次のようにルーティングされます

#example.com
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com [NC]
RewriteRule ^$ http://www\.example2\.com/?CampID=dm/DMdefault [R=301,L]

問題は2番目のリダイレクトです。最初の2つ(英数字)を転送URLの一部としてスライスし、次の5つを2番目の部分としてスライスしたい場合、これは機能しますか?

RewriteMap  lc int:tolower
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com [NC]
RewriteRule ^(\w{2})(\w{5})$ http://www\.example2\.com/landing/external-marketing/direct-mail/${lc:$1}?CampId=${lc:$1$2} [R=301,L]

これは*ケースを正規化し、修正するために転送http://example.com/BA025JDする 必要がありhttp://www.example2.com/landing/external-marketing/direct-mail/ba?CampId=ba025jdますか?

4

1 に答える 1

1

htaccessファイル内でディレクティブを使用することはできませんRewriteMap。サーバーまたはvhost構成でマップを定義する必要があります。残念ながら、apacheはそれをあなたの注意を引かないことを選択します。定義されていないマップを使用すると、サイレントに何も実行されません。

ただし、そのマップが定義されると、ルールは私のために機能します。

私の要求

GET /A1b2C3d HTTP/1.1
Host: example.com

lcマップが定義されたapacheの応答

HTTP/1.1 301 Moved Permanently
Date: Mon, 15 Oct 2012 18:44:37 GMT
Server: Apache
Location: http://www.example2.com/landing/external-marketing/direct-mail/a1?CampId=a1b2c3d
Content-Length: 349
Content-Type: text/html; charset=iso-8859-1
于 2012-10-15T18:47:23.720 に答える