2010-09-10 37 views
1

一切工作正常,直到我添加我的.htaccess文件。我正在嘗試將所有用戶路由到他們的個人資料頁面。所以www.darudude.com/user1路線www.darudude.com/userinfo.php?user=user1

我的.htaccess文件爲這樣:

RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)\?*$ userinfo.php?user=$1 [L,QSA] 

不過自從我加入這個,它打破我的會議。在每個頁面上,我都有一個初始化會話,會話存儲了引用者。這是處理重要部分的代碼片段。

if(isset($_SESSION['url'])){ 
    $this->referrer = $_SESSION['url']; 
}else{ 
    $this->referrer = "/index.php"; 
} 
//this echo is used to debug why this thing isn't working!! 
echo "<script>alert('".$this->referrer."');</script>"; 
/* Set current url */ 
$this->url = $_SESSION['url'] = $_SERVER['PHP_SELF']; 

,然後我使用這段代碼返回到原來的頁面:

header("Location: ".$session->referrer); 

因此,舉例來說,如果沒有.htaccess文件,如果我通過網頁一切正常運作的一個登錄並且我重定向回我登錄的頁面(也就是說,如果我從index.php登錄,我會重定向回index.php;如果faq.php,我會重定向回faq.php)。隨着.htaccess文件我不斷髮送到/userinfo.php導致我的東西它的東西我的重寫錯誤

這是它應該如何工作: index.php加載。 $ _SESSION ['url']被設置爲index.php
一個登錄表單被制定,其操作重定向到process.php
process.php $ session-> referrer設置從$ _SESSION ['url']
確認登錄後,頁面應該使用:header(「Location:」。$ session-> referrer)重定向。

這是它原本沒有任何問題的原理。

但是,在.htaccess創建後,它似乎將我重定向到userinfo.php。我認爲這與我的規則有關。

任何想法?

+0

我想看看最初設置'$ _SESSION ['url']' – webbiedave 2010-09-10 18:40:38

+0

這是第二個代碼塊的最後一行代碼。 – chaos 2010-09-10 18:43:01

+0

@chaos:啊,我明白了。 – webbiedave 2010-09-10 18:59:23

回答

0

這是因爲你依賴於$_SERVER['PHP_SELF'],它不包含查詢字符串(URI的?user=部分)。它之前有效,因爲您的頁面不依賴查詢字符串來唯一標識自己。您可以使用$_SERVER['REQUEST_URI']來代替,但請注意,您不希望想要查詢字符串被保留,現在它正在存在。

順便說一句,在你的RewriteRule正則表達式中的\?*做的事情就好像它不在那裏一樣。

+0

這也不起作用。我沒有試圖用正確的用戶去用戶信息頁面。我想回到我登錄的原始頁面,如index.php – darudude 2010-09-10 18:49:28

+0

我不明白應該如何發生,因爲如果你曾經被重定向到userinfo.php,你將繼續在那裏重定向永遠,但沒關係。在這種情況下,當它的userinfo.php中的會話URL設置代碼發生時,您需要將URL設置爲'$ _GET ['user']'而不是'$ _SERVER [任何]]。 – chaos 2010-09-10 18:54:23

+0

在創建.htaccess文件之前,我從來沒有被重定向到userinfo.php。 這是它應該如何工作: index.php加載。 $ _SESSION ['url']被設置爲index.php。 登錄表單被制定爲whos動作重定向到process.php。 process.php $ session-> referrer從$ _SESSION ['url']設置。 確認登錄後,頁面應該使用:header(「Location:」。$ session-> referrer);重定向。 這是它最初如何工作,沒有任何問題。 但是,.htaccess創建後,它似乎將我重定向到userinfo.php。我認爲這與我的規則有關。 – darudude 2010-09-10 19:15:53

0

您可以嘗試使用AJAX登錄,因此永遠不必刷新頁面。一個簡單的谷歌搜索將會產生大量的結果,見下文。即使你沒有使用jQuery(很多教程似乎期望你),使用基本的Javascript仍然是可能的,事實上,這就是我之前編寫AJAX登錄腳本的方式,之後再將其轉換爲使用jQuery。

http://www.google.com/search?q=php+ajax+log-in

2

我不知道如果我理解這個問題,但您使用的重寫規則似乎打開請求/index.php成請求/userinfo.php?user=/index.php這可能不是你想要的。

+0

是的,這正是我不想要的!你有什麼想法如何做到這一點?根據我的理解,2個重寫條件僅在文件和目錄不存在時才執行規則。另外,當我在地址欄中輸入index.php時,它將我重定向到正確的頁面(而不是userinfo.php) – darudude 2010-09-10 20:38:33

+0

由於2個RewriteConds,@Pies不正確,因爲index.php文件將存在,因此重寫規則獲勝不適用,並且對/index.php的請求將被正確發送。這只是一個請求,例如/ abc(不存在名爲abc的目錄或文件)將強制執行重寫規則。 – eclipse31 2010-09-10 21:06:43

+0

你確定index.php和userinfo.php存在於同一個目錄嗎?嘗試從.htaccess中刪除RewriteBase \。 – 2010-09-10 21:11:27