2012-02-21 14 views
1

フォルダー内のファイルにアクセスしようとしているすべてのURLを、ダウンロード中のファイルをログに記録する共通のPHPページにリダイレクトしたい場合、ユーザーがログインしているかどうかをチェックします。途中、私は必要届かない結果htaccess任意のURLを選択

方法1:

RewriteEngine on 
RewrteRule ^(.+)$ index.php?file=$1 

方法2:

RewriteEngine on 
RewriteRule ^([a-zA-Z0-9\-]+)$ index.php?file=$1 

私のindex.php

0123私はURLを使用してい
<php echo 'file - ' . $_REQUEST['file']; ?> 

としてhttp://localhost/next/files/Cool 出力方法1:

file - index.php 

出力方法2:

file - Cool 

あなたは私がやっている間違っているものを私に教えてもらえます方法-1の 私は方法-2を使用することができますが、ファイル名は[すべての文字を含めることができます]何でもかまいませんので、私は[方法-1のように]のすべてを網羅する正規表現を必要とする

よろしく

答えて

1
RewriteEngine on 
RewriteRule ^(.*)$ index.php?file=$1 [NC,L] 
+0

申し訳ありません。 しかし、これはうまくいった:[L、QSA] from http://stackoverflow.com/questions/5027388/htaccess-match-any-url-in-the-same-domain 私はこれらのことを教えてください。 – user237865

+1

ここにすべてのフラグが説明されていますhttp://httpd.apache.org/docs/2.4/rewrite/flags.html – Vytautas

1

問題方法1では、無限のリダイレクトを作成します。 すべてのファイルはindex.phpにリダイレクトされるので、index.php自体もindex.phpにリダイレクトされます。このようなあなたの最初のルールを書く

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^/index.php 
RewriteRule ^(.+)$ /index.php?file=$1 
1

:あなたが明示的にリダイレクトからのindex.phpを除外しなければならない

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

# If the request is not for a valid file 
RewriteCond %{REQUEST_FILENAME} !-d 
# If the request is not for a valid directory 
RewriteCond %{REQUEST_FILENAME} !-f 
# forward requests to index.php as a query parameter 
RewriteRule ^(.*)$ index.php?file=$1 [QSA,L] 

をそして、あなたのindex.php内では、とfileクエリパラメータをお読みください。

echo 'file - ' . $_GET['file']; 
+0

これは明らかにうまくいきません。なぜなら、書き換えによって*既存の*ファイルもindex.phpに書き直さなければならないからです。 。 – apfelbox

+0

ありがとう、小さな問題fileNameにはスペースが含まれていますか?写真(1).jpgを言ってください。写真((1).jpgを残してください)はここにあります。 – user237865

+0

@apfelbox Plsはmod_rewriteについて読み始めます。 'RewriteCond%{REQUEST_FILENAME}!-f'は物理ファイルの書き換えルールをスキップします。私の答えにもコメントがありましたが、おそらくあなたはそれらに注意を払っていませんでした。 – anubhava

関連する問題