2016-04-08 55 views
0

目前我正在開發一個與用戶交互的網站。我可以有以下命令的文件的.htaccess變換所有的用戶名的鏈接的個人資料頁:

RewriteEngine on 
RewriteRule ^([a-zA-Z0-9_-]+)$ profile.php?u=$1 
RewriteRule ^([a-zA-Z0-9_-]+)/$ profile.php?u=$1 

如果我理解正確,該代碼用於替換後的參數中的「profile.php」信號「?」如果URL匹配正則表達式。但我不明白「u = $ 1」是如何實現的,因爲「u」不是一個可變會話。這是我在PHP配置會話變量:

$_SESSION["id"] = $id; 
$_SESSION["username"] = $username; 
$_SESSION["password"] = $pswd; 
$_SESSION["email"] = $email; 

我想包括在正則表達式太多的空間,因爲此刻唯一的用戶名,如「FirstUser」被接受,如「用戶第一」的用戶名在瀏覽器中給我一個錯誤。

當我加入,我得到以下HTTP 500錯誤模式的空間:

Server Error

+4

'u'是'$ _GET'變量。 'echo $ _GET ['u']' –

+1

並獲得一個空格只需在模式中添加一個空格 – AbraCadaver

+2

檢查第一個答案在這裏:http://stackoverflow.com/questions/18233615/space-in-rewritecond – Miro

回答

0

.htaccess配置

RewriteEngine on 
RewriteRule ^([a-zA-Z0-9_-]+)$ profile.php?u=$1 
RewriteRule ^([a-zA-Z0-9_-]+)/$ profile.php?u=$1 

嘗試加載rewrite engine,這可能不允許(首先檢查這部分!)和(如果成功)將根據.htaccess文件的結構和將它們轉換爲profile.php,其中HTTP GET請求使用設置爲等於該子路徑的值的變量u

因此,如果.htaccess文件住在/home/kasbah/public_html和對應http://foobar/~kasbah,那麼當用戶去http://foobar/~kasbah/it-works,他們將被重定向到http://foobar/~kasbah/profile.php?u=it-works

然後,您的PHP代碼可以調用類似$_GET['u']的東西,以便對該變量進行操作。

Escape spaces as %20。您也可以使最終/可選的,並且只有一個RewriteRule

RewriteEngine on 
RewriteRule ^((?:[a-zA-Z0-9_-]|%20)+)/?$ profile.php?u=$1 
相關問題