2017-07-26 29 views
1

私は、私はこのために.htaccessを使用するが、私が持っているもの を成功しませんでしたPHPでリダイレクトに関するいくつかの問題を抱えているでhtaccessを経由して、次のさ2つのURL:リダイレクトは、PHP

http://localhost/PROJECT_NAME/USERNAME/348 

http://localhost/PROJECT_NAME/USERNAME 

何要求は、その後

http://localhost/PROJECT_NAME/USERNAME/111 

から来た場合)

1:私はここにされたいです私が試した何

http://localhost/PROJECT_NAME/detail.php 

:要求が

http://localhost/PROJECT_NAME/USERNAME 

から来た場合、それはに行くべき

http://localhost/PROJECT_NAME/index.php 

2):それはに行くべき

RewriteRule /(\w+)$ detail.php?id=$1 [L] 
RewriteRule /(\w+)$ index.php [L] 
RewriteRule /$ detail.php?id=$1 [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !index.php 
RewriteCond %{REQUEST_URI} !(.*)/$ 

成功しなかったこの後CEEDそれがインデックスのために正常に動作しますが、詳細ページのために、事前にお時間をみんなのおかげで助けてくださいません

Randheer

答えて

0

あなたがここに夫婦の問題があります。まず、マッチングの順序と特異性があります。

まず、正規表現学習者のための大きな落とし穴:\w(速記「単語」文字クラスは)[A-Za-z0-9_]と同等です。 。 。数字とアンダースコアが含まれていることに注意してください!最後のフラグメント内のIDの全てであると仮定すると

数値のみとユーザ名は、アルファ、numbericのすべてのいくつかのミックスされ、および/またはあなただけのマッチングの順序を変更することができ、アンダースコアと\d(数字を使用すること)文字クラスファースト:

RewriteRule /(\d+)$ index.php [L] 
RewriteRule /(\w+)$ detail.php?id=$1 [L] 

これは2つの例をカバーする必要があります。

3つ目のルールのユースケースを説明していないので、どのURLを適用しているのか、どのように変更する必要があるのか​​正確にはわかりません。ここにかかわらず、いくつか観察されている:

  1. あなたは彼らが適用RewriteRuleRewriteCondラインを配置する必要があります。
  2. 現時点では、RewriteRuleの式は、実際のファイルではない末尾のスラッシュで終わるものと一致します。
  3. また、index.phpでないことを確認すると、!-fに冗長です。!-d
  4. RewriteCondの式は、ネゲートされた式の中でキャプチャしようとしているので(何もキャプチャしないので、何もキャプチャしません)、あなたは実際には、またはそのことについては一致する有効な発現がルールでは1、/$と同じであるため)

あなたは上記のユーザ名の末尾にスラッシュを可能にしようとしている場合は、あなただけで、すでに何に追加することができますthere:

RewriteRule /(\d+)$ index.php [L] 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule /(\w+)/?$ detail.php?id=$1 [L] 

3番目のルールのユースケースが異なる場合、またはRewriteCondの式が貼り付けられたルールの下に別のルールのものだった場合は、詳細を含む質問を自由に編集してください。

+0

ご回答いただきありがとうございます。 ます。http:// localhost /をPROJECT_NAME/USERNAME それは少数@RandheerSinghChouhanに「detail.php」ページ –

+0

にリダイレクトされていない主要な問題は、次のURLにある 私はオプションの上にしようとしたが、それは動作しませんでした 事柄:1.他のルールは正しく機能していますか?そうでなければ、これらの行の前に 'RewriteEngine On'が表示されますか? 2.上記のコードのどのバージョンを試しましたか? 3.この.htaccessファイルはどのパスにありますか?さらに、これらのルールでブラウザ内でリダイレクトが発生することはありません。その目的は、Apache内の意図したファイルを指すようにリクエストを書き換えることです(透過的にユーザにリダイレクトする)。クライアント側のリダイレクト(たとえばレスポンスコード301または302)を発行する場合は、それに応じて[R]または[R = 301]フラグを使用する必要があります。 – justbeez