-1

私はひどいですmod_rewriteが、フォルダーへのリクエストを書き直して/files/users/*/(*はワイルドカードです)、/view/次のようにファイル名をクエリパラメーターに挿入する必要があります。

/files/users/9/test.pdfになる/view/?file=test.pdf

.htaccessファイルが内部にあると仮定すると、どうすればよいでしょう/files/users/か。

私はゆっくりとmod_rewrite.

4

2 に答える 2

0

では、私の企業秘密をすべて銀の皿に載せたいと思いますか?

そうですね、頑張ります。;-)

まず、ドキュメントがどこにあるかを知る必要があります。リファレンスについては、こちらをご覧ください: mod_rewrite. またはmod_rewrite、Apache のバージョンが 2.2 の場合。

Apache mod_rewriteで、多くのリンクを含む概要を見つけることができます。そこには、URL の書き換えに関する優れた紹介があります。多くの標準的な例については、こちらもご覧ください。

mod_rewrite は PCRE 正規表現をサポートしているため、時々 perlreregular-expression.infoが必要になることがあります。

今あなたの質問に

RewriteEngine On
RewriteRule ^(?:.+?)/(.*) /view/?file=$1

これで十分かもしれません。サブディレクトリを検索し、このサブディレクトリ(?:.+?)/files/usersのファイルの名前を取得します(.*)。このパターンが一致する場合、URL を書き換えて/view/?file=、キャプチャしたファイルに を追加し$1ます/view/?file=$1

もちろん、テストされていないものはすべて楽しんでください。

PS 追加情報は SO at .htaccess infoおよび.htaccess faqにあります。

于 2013-02-26T15:40:32.990 に答える
0

以下のディレクティブを.htaccessファイルに入れ、に書き換え /files/users/9/test.pdfます/view/?file=test.pdf。実際には、これは、http ://yourdomain.com/files/users/9/test.pdf にアクセスすると、訪問者にはhttp://yourdomain.com/view?file=testという書き換えられた URLが提供されることを意味します。 .pdf

RewriteRule ^[^/]+/(.*)$ /view/?file=$1 [L]

RewriteRuleディレクティブは、Apache mod_rewriteモジュールの一部です。次の 2 つの引数を取ります。

  1. パターン-現在の URL パスと照合する正規表現(URL パスは URL 全体ではなく、たとえば/my/pathですが、.htaccessコンテキストでは先頭のスラッシュ/が削除されてmy/pathになることに注意してください)。
  2. Substitution - ユーザーがリライトまたはリダイレクトされる宛先 URL またはパス。

ルール説明

パターン^[^/]+/(.*)$:

^    - the regex must match from the start of the string
[^/] - match everything but forward slash 
+    - repetition operator which means: match 1 or more characters
/    - matches a forward slash
(.*) - mathes any characters. The dot means match any character. The star operator means match ANY characters (0 or more). The parantheses means the match is grouped and can be used in backreferences.
$    - the regex must match until the end of the string    

置換/view/?file=$1:

...ということは、URL パスを/view/クエリ パラメーター ファイルを含むフォルダーに書き換えることを意味します。query パラメーターには、値を渡すと、パターンfileからの最初のグループ化された一致が含まれます (これは、RewriteRule パターンからの最初の一致を意味します)。 $1

[L]フラグ:

... mod_rewriteが書き換えルールの処理を停止することを意味します。これは、望ましくない動作や無限ループを回避するのに便利です。

于 2013-02-26T15:43:39.377 に答える