2012-02-28 5 views
1

ファイルの直接リンクはmod_rewriteを使って変数をPHPファイルにリダイレクトしますか?私のサイトのために

私が投げたいwww.testing.com/download/file.exeだろうのは、私は「ダウンロード」そう

というフォルダ内のファイルを持っているとしましょう.../download/file.exe?auth = asdffg122 **のような認証トークンで、authトークンは時間と有効期限のハッシュです。これまでのところ私は、.htaccessファイルに書かれています:

RewriteEngine on 
RewriteRule \(.*)$.(exe)$ check.php?file=$1?auth=$2 [QSA] 

私は変数$ 1へのファイルの名前を渡したい、と$変数2の認証トークン。これを行う方法はありますか?あなたはおそらくしたかった、または書くべき何

+0

をOrbling @ $からのコメントに基づいて変更されたあなたは認証値は、htaccessのファイルの内部で生成されることを期待しますか? –

+0

リンク作成時に生成されません。変数をPHPファイルに渡したいだけです。 –

+0

実際のファイル名はfile.exeで、ダウンロードリンクはfile_dummy.exe?auth = ** hash **です。その後、ファイル名とハッシュをPHPに渡しますが、リンクはそのように見えます直接ファイルにリンクします。 –

答えて

1

このような?

RewriteEngine on 
RewriteCond %{QUERY_STRING} .*auth=(.*)\&*.*$ 
RewriteRule ^.*\/(.*\.exe)$ check.php?file=$1&auth=%n 

あなたがGETリクエスト 編集に=認証を追加すると仮定:

+0

クエリ文字列は 'RewriteRule'に入る前に削除されますので、そのように照合することはできません。マッチングが必要な場合は 'RewriteCond'と'%{QUERY_STRING} 'にマッチさせることができ、その後の 'RewriteRule'コマンドで'%n'の置換( '$ n'とは対照的)を使ってマッチングすることができます。 '[QSA]'タグは、書き換え後にクエリ文字列を追加し、ルールの送り先に追加したものと組み合わせます。 – Orbling

+0

私は必ずしもそれが一致する必要はありません、私はちょうどそれがPHPファイルに渡される必要があります。 –

1

は次のとおりです。

RewriteRule ^(.*\.exe)$ check.php?file=$1 [QSA] 

大手\バックスラッシュが^開始アンカーである必要があり、あなたはダウンロードフォルダにそののRewriteRuleを配置する場合。あなたはまた、1つだけ$の主題マーカーの終わり(通常)を持つことができます。ファイル拡張子をアサートするには、ファイル拡張子をかっこ内に移動します。 (.*\.exe)の全体が$1になります。

[QSA]を使用すると、には自動的に&auth=abc22が追加されます。したがって、$2の追加は冗長になります。 (とにかくQUERY_STRINGにマッチするためには別のRewriteCondが必要ですが、書き換えパスの一部ではありません)

さらに多くの例についてはServerfault: Everything You Ever Wanted to Know about Mod_Rewrite Rules but Were Afraid to Ask?も参照してください。

+0

あなたの答えに感謝しています。だから、(。* \。exe)が$ 1に渡されたとき、あなたは言っていますか?file.exe?auth = abc22 = $ 1? –

+0

'?'疑問符までの部分だけが '$ 1'になります。クエリ文字列は、RewriteRuleによって認識されません。詳細はhttp://wiki.apache.org/httpd/Rewriteを参照してください。 – mario

+0

どのように私はクエリの書き換えを書くつもりだろうか?何かのように (^。\?)$ ..それを渡す?いいえ? :/ lol –

関連する問題