2011-07-28 9 views
2

ユーザがURLにユーザ名を入力し、プロファイルにリダイレクトするリダイレクトを行いたいと思う.->example.com/user/joeexample.com/user/profile.php?username=joeがリダイレクトされ、そのプロファイルが明らかに表示される。.htaccessでURLのユーザ名を使用してリダイレクトする

私はこれを行う方法を見回しましたが、まだそれを動作させることはできませんでした。 これをどのようにすることができますか? .htaccessファイルを置く場所はどこですか?

  • ルート
    • 管理
    • 公共
      • ユーザー
        • profile.php
      • のindex.php
      • を含み10

答えて

3

ディレクトリから「パブリック」ディレクトリは、あなたのウェブサイトのドキュメントルートであるように見えます。だから、そこに.htaccessファイルを置きます。

これはどれもテストされていません。しかし、これはあなたを地面から離れるはずです。私はこれを達成するためにmod_rewriteを使用します。このようなものは、あなたの.htaccessファイルに入るはずです。

RewriteEngine On 
RewriteRule ^user/(.+)$ user/profile.php?username=$1 [R,L] 

これは問題を解決するはずです。 [R]フラグを指定すると、Apache HTTPDはブラウザに新しいURLのリダイレクトと訪問を要求します。ユーザーが何も知らなくてもリダイレクトを内部にしたい場合は、[R,L]フラグを使用しないでください。

これが言えば、これは私が実際にやる方法です。

RewriteEngine On 

# Canonicalize /user/foo to /user/foo/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^profile/([^/]+)$ /profile/$1/ [R=301,L] 

# Map /user/foo/ to foo's profile 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^profile/([^/]+)/$ profile/index.php?p=$1 [QSA] 

RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dは、ユーザーがサーバーに存在する有効なファイルやフォルダであるリソースに対して要求したとき、ちょうど気にしないことを確認するだろうについてのすべてのこれらのリダイレクトのルール、先に行くと、そのファイルまたはフォルダをすぐに提供してください。

最初のRewriteRuleは、ユーザーが後続のスラッシュを忘れてしまった場合、ブラウザがスラッシュを含むURLにリダイレクトするようブラウザに要求します。これは、Apache HTTPDが(おそらくmod_dirのために)デフォルトで動作する方法であり、ここでも同様の動作を維持しようとします。

第2のRewriteRuleは、http://example.com/user/foo/へのリクエストが有効なURLであることを確認しますが、http://example.com/user/foo/bar/ではありません。 [QSA]フラグを使用すると、URLに追加されたすべてのパラメータが確実に保持されます。

[QSA]フラグがない場合、http://example.com/user/foo/?ref=related+articlesは内部でhttp://example.com/user/profile.php?user=fooにリダイレクトされます。そのフラグで、私は好きなものにhttp://example.com/user/profile.php?user=foo&ref=related+articlesにリダイレクトされます。

+0

ありがとう、ちょうど私が必要なもの! :D – Hraffnir

関連する問題