1

私が書いているリンク短縮サービスに.htaccessリライトを使用しようとしています。

私は次のことを達成しようとしています:

URL: http ://domain.com/keyhere:http://domain.com/link.php?key= keyhereにリダイレクトします

URL: http ://domain.com/keyhere+:http://domain.com/analytics.php?key= keyhereにリダイレクトします

私は最初のものを達成しましたが、末尾の+でリダイレクトできません

このための私のコードは次のとおりです。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !#
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ link.php?key=$1 [L]

誰かが必要な書き換えルールで私を正しい方向に向けることができれば、それは素晴らしいことです。

前もって感謝します。

4

1 に答える 1

1

グループ(.*)は貪欲なので、一致する 2 番目のルールが必要になります。+

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
# Also added non-existing directory condition
RewriteCond %{REQUEST_FILENAME} !-d
# What's this for??
#RewriteCond %{REQUEST_URI} !#

# Match everything up to + ,followed by + first...
RewriteRule ^([^+]*)\+$ analytics.php?key=$1 [L]

# Next rule matches everything when there is no +
RewriteRule ^([^+]*)$ link.php?key=$1 [L]

パターン[^+]*は、0 個以上の ( *) 文字に一致することを意味しますが、a は含みません+。その後に$(文字列の終わり) が続く場合、文字列に no が含まれていることを意味します+

+文字列の末尾に が存在するかどうかをテストするために、 を含めます\+$。は正規表現の特殊文字であるためエスケープする+必要がありますが、文字どおりの存在が必要です。したがって、すべての文字をキャプチャすることを意味します ( 文字^([^+]*)\+$の最後の.++

于 2012-08-17T14:05:24.503 に答える