2017-07-27 53 views
0

如何才能將我的網站的名稱更改爲:www.example.com/user/panel.php至www.example.com/username/panel.php,其中「用戶名」是唯一的每個用戶,並且對於每個登錄將是來自數據庫的用戶的名稱,因爲它在jsfiddle.net中,他們可以幫助我嗎?如何使用htaccess在php中更改目錄的名稱?

+0

以前可能已經詢問過。是否[this](https://stackoverflow.com/questions/16655015/using-htaccess-to-change-directory-in-url),[this](https://stackoverflow.com/questions/43076620/using- htaccess-to-change-directory-show-in-url)或[this](https://stackoverflow.com/questions/1264773/rewrite-a-folder-name-using-htaccess)回答你的問題? – Ash

回答

1

個人而言,我不會用的.htaccess這個(特別)

是說,大多數時候人們做這種方式

RewriteEngine On 
RewriteRule ^users/([-a-zA-Z0-9_]+)/?$ index.php?user=$1 [L] 

所以,如果你有一個像

www.yoursite.com/users/someguy 
一個網址

然後它將它傳遞給apache(和php)如

www.yoursite.com/index.php?user=someguy 

然後在PHP中,您只需使用$_GET[user]即可訪問它。我現在忽略安全問題(你不應該依靠用戶輸入來告訴他們是誰,他們可以說謊),因爲我會使用我稱之爲URI方法(而不是URL)的URI。一條想象的路徑。這也是許多MVC系統採用的方法。所以,爲了這個,我將與URI開始

www.yoursite.com/index.php/users/someguy 

注意其中的index.php是(中間)。然後,你喜歡這款

RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f #if not a real file 
    RewriteCond %{REQUEST_FILENAME} !-d #if not a real folder 
    RewriteRule ^(.*)$ index.php/$1 [L] #hide the index.php 

一個的.htaccess那麼這樣做是允許你刪除index.php給你這樣的

www.yoursite.com/users/someguy 

這就是我們想要的東西,看起來基本上是相同的URL作爲第一種情況。

然後你凸輪使用$_SERVER['QUERY_STRING']晚飯全球,這將給你一切都會過去的index.php

/users/someguy 

你可以拆分起來,它的地方,做任何你需要用它的路線。就像我喜歡這個更多這個

$uri = array_filter(explode('/', $_SERVER['QUERY_STRING'])); 

//$uri = [ 'users', 'someguy' ]; 

現在的原因,是它更靈活,它可以讓你使用的查詢字符串的URL,其他的東西的?var一部分。 (如可加入書籤的搜索表單)即。因爲你沒有破壞GET請求的查詢參數,所以感覺不那麼亂。相反,使用第一種方法,如果你的.htaccess草率,你可能會讓URL的查詢部分在你的網站上無法使用,這對我來說只是感覺不對。

它也更容易維護,因爲它需要額外的漂亮網址

例如沒有進一步的設置: 說你想要prettyfy您的產品。使用第一種方法,你將不得不回到.htaccess中新增至少1多個規則:

RewriteEngine On 
RewriteRule ^users/([-a-zA-Z0-9_]+)/?$ index.php?user=$1 [L] 
RewriteRule ^products/(0-9_]+)/?$ index.php?product=$1 [L] 

甚至可能更復雜的層面,如果你有產品類別

RewriteRule ^produts/([-a-zA-Z0-9_]+)/(0-9_]+)/?$ index.php?category=$1&product_id=$2 [L] 

一個欺騙你會之後結束了幾十條規則,其中一些規則可能不會馬上清楚他們的工作。然後你意識到你拼寫爲productsproduts,並且必須開始重命名事物。後來只是一團糟。

現在使用第二種方法,除了將其路由到索引頁面之外,您不需要執行任何其他步驟。你只要把這個網址

www.yoursite.com/products/123 

而且從$_SERVER陣列拉的東西沒有進一步重寫規則搞亂。

這是我以前的答案,概述瞭如何構建基本路由器。

Oop php front controller issue

有意義。