2013-05-15 85 views
1

我有一個URL在URL替換ID到用戶名

http://website.com/view/b2c32b2c782f65be2c299f7b38189a120fd51c89/

其引導用戶的簡檔,即,與用戶的ID。

是否有反正使用php/.htacess/mysql來替換這個ID與相對用戶名?

有沒有任何形式的解決方案?

我使用重寫規則,以便在URL中的ID被解釋爲獲取值:

RewriteRule ^view/([a-f0-9]{40})/$ ./view/index.php?profile_id=$1 
+1

是的,但我們需要看到更多。什麼腳本生成這個URI?向我們展示一些代碼夥計 – samayo

+0

當然。只要有任何處理請求的腳本查找用戶名並重定向到基於該用戶名的新網址即可。 –

+0

我認爲你誤解了,我只需要用用戶名替換id,我將用戶名存儲在與id相同的表中,我使用該ID來檢索關於用戶的數據,即生成他們的簡檔。 – cwiggo

回答

2

我認爲你應該考慮使用RewriteMap來解決你的問題。

想到這種情況:最終用戶請求view/joe-soap/。 RewriteMap將向服務器詢問該用戶的ID,並根據響應實際請求/view/b2c32b2c782f65be2c299f7b38189a120fd51c89/

爲此,您需要創建一個PHP腳本,該腳本接受來自URL的用戶名(由RewriteMap提供),然後返回該用戶的ID。然後,RewriteMap將允許您靜默請求view/index.php?profile_id=<retrieved_use_id_here>

我建議你read through the documentation由Apache的網站提供。這裏有一些更多的網站,可以幫助你:

  1. Making sense of Rewritemaps in Apache
  2. mod_rewrite with RewriteMap: External Rewriting Program
  3. RewriteMap PRG By Example Using PHP For Apache Mod_Rewrite

然而:我建議,考慮到這增加了一個額外的要求,只需使用PHP來獲取ID,並在相同的請求中繼續(如其他人所建議的那樣)。

0

你可以嘗試使用GET變量。 www.mywebsite.com/view.php?username=john101

這樣的...

PHP(view.php)

<?php 
    $username = $_GET["username"]; 
    $query = "SELECT * FROM users_table WHERE username = '".$username."'"; 
    //do whatever you need to do with $username and $query to create user's profile page 
?> 

我假設多個用戶不能有相同的用戶名

希望這會有所幫助。

+0

nope,這不是我想要的。 :\ – cwiggo

+0

我希望能夠用用戶名替換id – cwiggo

+0

對不起,除了向URL添加GET變量之外,我不知道如何更改URL。儘管好運。 –

0

由於原始URL,如:

http://website.com/view/b2c32b2c782f65be2c299f7b38189a120fd51c89/ 

您可以改爲鏈接到類似:

http://website.com/view/b2c32b2c78/your-username/ 

,並使用重寫規則,如:

RewriteRule ^view/([a-f0-9]{10})/(.*)$ ./view/index.php?profile_id=$1 

這使得什麼在URL的ID部分後面沒有int與身份證本身發生衝突。

然後,您可以使用MySQL查詢來選擇合適的用戶,即使只有其ID的前十個字符:

SELECT * FROM users WHERE LEFT(user_id,10)='" . mysql_real_escape_string($_GET['profile_id']) . "' LIMIT 0, 1; 

我用這個方法對我的網站之一,其擁有的條目向上三到四千,還沒有任何碰撞只是使用八個個字符,而不是我在這裏使用的十個字符,並且還沒有看到任何碰撞。