2012-08-29 53 views
-1

可能重複工作時:
global variables in php not working as expectedPHP全局變量不使用mod_rewrite

我有一個網站的每一個頁面上運行PHP函數,它使用全局變量,例如:

$var = "test"; 
function test() { 
    global $var; 
    echo $var; 
} 

當直接訪問/anyFile.php時,此工作正常,但我們bsite使用一個htaccess文件來重寫URL,這樣的:

RewriteRule ^action/(.*)$ /index.php?action=$1 [L] 

當一個URL時htaccess的rewrited,該功能不起作用,則是$ var未設置。

發生了什麼,我該如何解決?(我需要使用「全球」,否則我需要重新編寫了很多東西

+1

您的'$ var'沒有在全局上下文中定義,因爲可能(這是您沒有顯示的代碼)index.php從函數(= local scope)調用動作腳本。 – mario

+1

發佈你的實際代碼。 Apache不能影響PHP變量,除非在'_ _GET'中傳遞,除非register_globals是On,它不應該是!!!! _ –

+0

這些行是否在一起? mod_rewrite不影響php ...必須有其他事情發生或$ var在其他地方被修改。 – Grzegorz

回答

1

您需要使用[QSA,L]而不是[L]

RewriteRule ^action/(.*)$ /index.php?action=$1 [QSA,L] 

QSA代表Query String Append,並轉發查詢字符串(在URL中?後的部分),以PHP腳本。

順便說一句,你應該使用register_globals棄用作爲PHP 5的。 4和刪除從PHP 5.4起),但使用$_GETsuperglobal來代替。

---編輯---

按照下面的評論(你不能修改的.htaccess),你的運氣了。你唯一的解決辦法是在解析請求URI查詢字符串,並使用它,你會使用$_GET超全局:

$queryString = parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY); 
parse_str($queryString, $query); 
echo $query['action']; 

我強烈建議你得到修改爲您.htaccess,雖然。

+0

htaccess是從腳本不是我的代碼,所以我不認爲我會修改,我可能會打破某些東西。我也嘗試了$ GLOBAL ['var'],但它沒有設置在重新編輯的URL上。 –

+0

看到我上面更新的答案。 – Benjamin