2010-07-05 48 views
0

所以基本上我想讓用戶能夠去我的網站上的類似/45678的網址,而不必使用/?p=45678,所以我真的只想刪除變量名。我試過使用mod_rewrite,但它似乎只是用於訪問頁面時刪除名稱。如何使用htaccess從URL中刪除變量名?

下面是當前的代碼:

RewriteEngine On 

RewriteCond %{QUERY_STRING} ^p=([0-9]+=$ 

RewriteRule ^/$ /%1 [R] 
+3

Mod_rewrite正是你所需要的。看到http://stackoverflow.com/questions/3179241/using-htaccess-to-create-clean-url-structure – 2010-07-05 12:02:27

+0

這會引發500錯誤 – 2010-07-05 12:08:00

+0

然後,你可能寫了你的重寫規則錯誤,編輯你的帖子,幷包括你正在使用的代碼。 – 2010-07-05 12:17:20

回答

0

簡單地改變所有鏈接到/ 45678,而不是P = 45678的?還是我完全誤解了你?因爲我從你的文章中得到的結果是它能正常工作,除非你手動訪問?p = 45678,因爲它保持爲?p = 45678。

編輯:
這是我使用什麼http://www.madphp.org/dev/,給它一去,就像我的一個魅力(這也刪除的index.php部分)。要訪問您現在更乾淨的URL,您只需簡單分解$_SERVER['PATH_INFO']變量即可獲取PHP腳本中的所有必需參數。

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php/$1 [L] 
+0

感謝您的快速響應,基本上我想使用.htaccess文件來獲取URL的/ 45678部分並使其成爲PHP GET變量,以便URL看起來很乾淨 – 2010-07-05 12:03:52

+0

我更新了主帖, 看一看。 – eklundchristopher 2010-07-05 12:15:20

+0

再次感謝您的回覆,但它仍然無法正常工作,我的頁面只是告訴我該變量是未定義的,所以我會想象這不會將/ 45678作爲?p =傳遞給它,而正面該網站沒有返回404錯誤。 – 2010-07-05 12:18:23

0

您是否正確設置了mod_rewrite?如果是這樣,您可以使用簡單的$_GET變量等變量,在這種情況下,您必須訪問PHP中的$_GET['p']

0

我沒有使用.htaccess,但它確實查詢數據庫。我前一段時間寫過,因此它使用PEAR DB,根據數據庫/連接方法進行調整。我只需複製我的代碼,並讓您找出需要進行的更改。

$db=connect_db(); 
$name=substr($_SERVER['PHP_SELF'], 20); 
$name=strtolower($name); 
$id=$db->getone("select id from user where login='{$name}'"); 
header("Location: /dragonart/profile?user=" . $id); 

如果您將信息存儲在數據庫中,這可能是一個不錯的選擇。缺點是URL不會被重寫,並且用戶最終被髮送到以$ _GET變量結尾的頁面。

編輯:
只是意識到使用我的方法可以用一個更簡單的方法來得到答案。由於我的解決方案是使用使用自己的用戶名來查找用戶的ID,然後派人到他們的個人資料(這需要ID),一個更好的解決辦法是這樣的:

$var=substr($_SERVER['PHP_SELF'], $length); 
header("Location: /path/to/page?p=".$var); 

其中$長度是通常長度的URL沒有變量在最後。