2016-04-11 10 views
1

プロジェクト用に自分のソーシャルメディアを構築しようとしています。 "id"またはカスタム "/my.user" URLのいずれかをユーザデータベースに問い合わせるprofile.php上のPHPスクリプトがあります。 私はそれのようになりたいURL、それを入力します。それは、このコードで動作しますmysite.com/my.user:htaccessでSEOに優しいURLを取得するにはどうすればよいですか?

RewriteRule ^/?(.+)/?$ ./profile.php?u=$1 [QSA,L] 

しかしhtaccessファイルは私が」に入れて聞かせていません例えば、mysite.com/20はプロファイルの「id」を使用して動作しません。 私は別のhtaccessのコードを試してみましたが、それは上記と同じように動作します:

RewriteRule ^/?([a-zA-Z0-9\-=&[email protected]\.]+)/?$ profile.php?u=$1 [QSA,L] 

だから、物事をクリアします。

  • これは動作します:mysite.com/my.user
  • はこれはしていません:mysite.com/20またはmysite.com/myuser

私はこの作業を取得することを期待:

  • mysite.com/20
  • mysite.com/my.user

どうすればいいですか?

完全に.htaccessコード:

AddDefaultCharset UTF-8 

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 

Options +FollowSymLinks 

RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !^./profile.php 


RewriteRule ^/?(.+)/?$ ./profile.php?u=$1 [QSA,L] 

<ifModule mod_gzip.c> 
mod_gzip_on Yes 
mod_gzip_dechunk Yes 
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$ 
mod_gzip_item_include handler ^cgi-script$ 
mod_gzip_item_include mime ^text/.* 
mod_gzip_item_include mime ^application/x-javascript.* 
mod_gzip_item_exclude mime ^image/.* 
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.* 
</ifModule> 

今何が起こるには、ユーザーがmysite.comのような何のドットを、持っていない場合mysite.com/my.user(特殊なユーザーのURL)が働いて、しかし、されていないことです/ myuser。それから存在しないmyuser.phpを取得しようとします。 また、 "my.user"の "id"をmysite.com/20のように入力すると、 "profile not found"と表示されます。

これはprofile.phpクエリのコードです:

$profile = mysqli_real_escape_string($mysqli, $_GET['u']); 
if (filter_var($profile, FILTER_VALIDATE_INT) == true) { 
    $query = "SELECT * FROM UserProfile, Location WHERE UserProfile.id = '$profile' AND Location.id = '$profile'"; 
} else { 
    $queryurl = "SELECT id FROM UserProfile WHERE UserProfile.ProfileUrl = '$profile'"; 
    if ($result2 = $mysqli->query($queryurl)) { 
     while ($row2 = $result2->fetch_assoc()) { 
      $userid = $row2['id']; 
     } 
    } 
    $query = "SELECT * FROM UserProfile, Location WHERE UserProfile.ProfileUrl = '$profile' AND Location.id = '$userid'"; 
    $result2->free(); 
} 

よろしく、エリック。

+0

「動作しません」と定義します。それは何をするのですか?代わりに何をすると思いますか? – deceze

+0

私は彼がprofile.phpを望んでいると思う?u = 20(ここで20はIDです)彼の例でカスタムurl(my.user)として利用できるようになります –

+0

@deceze私は投稿を更新しました。デニスは言った。 –

答えて

0

あなたの最初のルールは存在しないURIと一致し、/uri.phpに書き換えられますので、2番目のルールは決してトリガーされません。

RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^([^.]+)$ $1.php [NC,L] 

変更

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^.]+)$ $1.php [NC,L] 

ので、ルールは、既存のPHPファイルを一致させることができます。

+1

ありがとう、それは動作します!私はhtaccessでそれほど良いことではない、それは私の15時間かかった、私はあなたを愛して! :-) –

関連する問題