2009-04-25 13 views
1

私はいくつかの変数(PHPの$_GETでそれらを使うために)を持つページにmod_rewriteを使ってページをリダイレクトしようとしています。ModリライトとPHP

  • ユーザが/c/stgに入ると、それはitem_show.php?id=$1&f=1にリダイレクト(fページ番号である):数行との例を与えるために

  • ユーザーが/c/stg/2と入力すると、show.php?id=$1&f=$2の2番目のページにリダイレクトされます。

私はこれらのエラーや誤用が私のファイルに存在しないと思うけど、ここで私が欲しいものです:

は、私は、ユーザーが$1item_show.php?id=$1&f=1を行くために直接/stringを入力するには、私たちの文字列ですもちろん...

の部分をRewriteRuleから削除してファイルを変更すると、他のすべてのディレクトリでエラーが発生し始め、ファイルは読み込まれません(my.css)私はすでに定義していますが、RewriteCond %{REQUEST_FILENAME} !-f ...

ご意見はありますか? または、どのようにしてこのシステムを可能にすることができますか?

Options FollowSymLinks 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

#user 
RewriteRule ^u/([^/]+)/?$ profile.php?username=$1 [L,NC] 

#marked 
RewriteRule ^marked/([^/]+)/?$ item_marked.php?id=$1 [L,NC] 

#content 
RewriteRule ^c/([^/]+)/?$ item_show.php?id=$1&f=1 [L,NC] 
RewriteRule ^c/([^/]+)/([^/]+)/?$ item_show.php?id=$1&f=$2 [L,NC] 
+0

最初の提案:その中にこれらのルールを使用してファイルの内容を投稿してください。それはメインサーバーの設定か.htaccessファイルですか? –

+0

現在の.htaccessファイルはここにある!: オプションFollowSymLinksを するRewriteCondの%{REQUEST_FILENAME} -f するRewriteCondの%{REQUEST_FILENAME}で RewriteEngine -d #USER のRewriteRule^U /([^ /] +) /?$ profile.php?username = $ 1 [L、NC] #marked RewriteRule ^は/([^ /] +)/?$ item_marked.php?id = $ 1 [L、NC] #content RewriteRule^c /([^ /] +)/?$ item_show.php?[L、NC] $ 1&f = $ 2 [L、NC] RewriteRule^c /([^ /] +)/?$ item_show.php?id = $ 1&f = $ 2 [L、NC] – jnbn

+0

c /を削除すると、すべてのURLがあなたのパターンと一致することを意味します。これはあなたが意味するものです。右: > RewriteRule ^([^ /] +)/?$ –

答えて

1

RewriteCondのみが最初のRewriteRuleに渡されると間違っていますか?

代わりにこれを試してみてください:

Options FollowSymLinks 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

#user 
RewriteRule ^u/([^/]+)/?$ profile.php?username=$1 [L,NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
#marked 
RewriteRule ^marked/([^/]+)/?$ item_marked.php?id=$1 [L,NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
#content 
RewriteRule ^c/([^/]+)/?$ item_show.php?id=$1&f=1 [L,NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/([^/]+)/?$ item_show.php?id=$1&f=$2 [L,NC] 

乾杯、

+0

私はすでに今日それを理解したが、感謝のジョソ:) – jnbn

+0

私は投票できるように私はちょっと嬉しいです。 :pここの質問の多くは私の知るところではありません。 :( – johankj

1

RewriteCondディレクティブはまず以下のRewriteRuleディレクティブに属しません。したがって、あなたの場合、2つのRewriteCondディレクティブは最初のRewriteRuleディレクティブにのみ適用され、他のディレクティブには適用されません。リクエストが既存のファイルまたはディレクトリにマッピングすることができる場合

しかし、あなたは、書き換え処理を終了し、この中絶ルールを使用することができます。

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 

これは、要求ができない場合、以下の規則にのみテストされていることを引き起こします既存のファイルまたはディレクトリに直接マップされます。

関連する問題