所以基本上我想讓用戶能夠去我的網站上的類似/45678
的網址,而不必使用/?p=45678
,所以我真的只想刪除變量名。我試過使用mod_rewrite,但它似乎只是用於訪問頁面時刪除名稱。如何使用htaccess從URL中刪除變量名?
下面是當前的代碼:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^p=([0-9]+=$
RewriteRule ^/$ /%1 [R]
所以基本上我想讓用戶能夠去我的網站上的類似/45678
的網址,而不必使用/?p=45678
,所以我真的只想刪除變量名。我試過使用mod_rewrite,但它似乎只是用於訪問頁面時刪除名稱。如何使用htaccess從URL中刪除變量名?
下面是當前的代碼:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^p=([0-9]+=$
RewriteRule ^/$ /%1 [R]
簡單地改變所有鏈接到/ 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]
感謝您的快速響應,基本上我想使用.htaccess文件來獲取URL的/ 45678部分並使其成爲PHP GET變量,以便URL看起來很乾淨 – 2010-07-05 12:03:52
我更新了主帖, 看一看。 – eklundchristopher 2010-07-05 12:15:20
再次感謝您的回覆,但它仍然無法正常工作,我的頁面只是告訴我該變量是未定義的,所以我會想象這不會將/ 45678作爲?p =傳遞給它,而正面該網站沒有返回404錯誤。 – 2010-07-05 12:18:23
您是否正確設置了mod_rewrite?如果是這樣,您可以使用簡單的$_GET
變量等變量,在這種情況下,您必須訪問PHP中的$_GET['p']
。
我沒有使用.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沒有變量在最後。
Mod_rewrite正是你所需要的。看到http://stackoverflow.com/questions/3179241/using-htaccess-to-create-clean-url-structure – 2010-07-05 12:02:27
這會引發500錯誤 – 2010-07-05 12:08:00
然後,你可能寫了你的重寫規則錯誤,編輯你的帖子,幷包括你正在使用的代碼。 – 2010-07-05 12:17:20