1

私はこれをhtaccessファイルで作成します..別のページからURLを書き換えるため

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)$ profile.php?username=$1 [QSA]    
RewriteRule ^([a-zA-Z0-9_-]+)/$ profile.php?username=$1 [QSA]   

そしてそれは正常に動作します..

今、Facebookとしてさらに追加する必要があります

あなたはfacebook.com/usernameを置くことができます

これは: facebook.com/profile.php?username=

& あなたは facebook.com/pagename を置くことができます: facebook.com/pages.php?username=

そして正常に動作します

別のページから..

私はこのようにする必要があります..

何か助けて?!

RewriteRule ^([a-zA-Z0-9_-]+)$ profile.php?username=$1 [QSA]    
RewriteRule ^([a-zA-Z0-9_-]+)/$ profile.php?username=$1 [QSA]   

RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?username=$1 [QSA]  
RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?username=$1 [QSA] 
4

1 に答える 1

1

正規表現パターンは同じように一致するため、ページと人 (または profile.php と index.php へのリダイレクト) を区別するための何かが必要になります。

これは 2 つの方法のいずれかで実行できます。まず、すべてを 1 つのページに移動できます。これを redirect.php と呼びましょう。このページで、id 値を確認してからリダイレクトできます。以下のようなので:

    RewriteRule ^([a-zA-Z0-9_-]+)/?$ redirect.php?id=$1

redirect.php では、それに対していくつかのクエリを取得$_GET['id']して実行し、それがページか人かを判断してから、次のようなものを使用してリダイレクトします。

    header("Location: profile.php?username=".$_GET['id']);

Facebook 関連のものを厳密に探している場合は、データベースの代わりにグラフ API を起動して、それがページ ID なのか個人 ID なのかを判断できます。(両方に存在できるかどうかはわかりませんが、そうではないと思います)。

ページか人物かを判断するためのデータベースやデータ ソースがない場合は、URL 文字列に /pages/{pageid} などの何かを追加して、ルールを書き換える必要があります。に:

    RewriteRule pages/([a-zA-Z0-9_-]+)/?$ index.php?username=$1  # for pages
    RewriteRule ^([a-zA-Z0-9_-]+)/?$ profile.php?username=$1  # for people

URL で何かを使用できず、データベース経由でアクセスする方法がない場合は、2 つの同一のパターンにヒットしているため、うまくいきません。

于 2013-02-12T21:25:07.590 に答える