2012-11-23 28 views
0

我想設置一個$ _GET變量,如果它是空的。但它似乎並沒有工作。PHP/.HTACCESS |手動設置GET變量來停止虛榮URL干擾?

這是我到目前爲止。

if(!$_GET["profile"]) 
{ 
     $_GET["profile"] = null; 
} 

編輯

我試圖做到這一點的全部原因是因爲我在我的.htaccess有兩個個性化網址的集合,但我試圖找出如何跳過第二個性化網址所以我不需要去something.com/home/ < - 請注意第二個斜槓,如果我不放第二個斜槓,那麼它會將我指向我的404錯誤文檔。基本上,我如何允許它,所以我不需要把第二個斜槓,導致GET變量爲空?

這裏是我的.htaccess,

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]*)/([^/]*)$ /index.php?p=$1&profile=$2 [L] 
ErrorDocument 404 /redir404.php 

就像我說的,這個工作,而不是送我到我的ErrorDocument,我需要把我的網址是http://ncms.us/home/爲它工作。

+0

您可以使用'isset' – Addict

+0

您是如何確定它「無法正常工作」的? –

+0

目前還不清楚這個變量如何與「虛榮網址」相關聯。 '$ _GET'從URL後面的'?'獲取參數,與'/'無關(除非在.htaccess中有一個重寫規則)。 – Barmar

回答

0

使用!isset($ _ GET [「profile」])查看是否未設置。

+0

那麼檢查後,如何設置,我將如何手動設置GET變量? –

+0

定期分配工作。你只需要確保分配被調用,因此使用isset。 – RonaldBarzell

3

首先,這條線將產生一個 「未定義指數」 通知:

if (! $_GET["profile"]) 

這是更好地使用isset()避免這些通知:

其次,您的腳本應該工作正常,但變異樂與NULL一個值實際上是「設置」,這可能絆倒您:

if (! isset($_GET["profile"])) 
{ 
    $_GET["profile"] = null; 
} 
var_dump(isset($_GET["profile"])); // will print FALSE 

http://php.net/manual/en/function.isset.php
isset - 檢測變量是否設置,而不是NULL

但是,仍然可以使用$_GET["profile"],而腳本中的NULL值不會生成通知。

這可能是最好只創建一個新的變量,而不是從$_GET直接讀取:

$profile = isset($_GET["profile"]) ? $_GET["profile"] : NULL; 

注入值到超全局變量有時可以在其他腳本奇怪的副作用,因爲他們擁有全球訪問。最好避免它。

+0

OP還應該查看['empty()'](http://ca1.php.net/manual/en/function.empty.php)函數,因爲它們在PHP中是邏輯上不同的概念。另外,我同意不修改'$ _GET' /'$ _POST'變量。只有兩件事你應該用它讀取到另一個變量/函數中,或者'unset()'它。 – Sammitch

+1

我個人也不會解除它。我更喜歡使用包裝類來進行只讀訪問超級全局,並且可以使用便捷方法來獲取它們。我也會提防'empty',因爲它在'(string)'0''上返回true,如果你不知道它會導致錯誤。 –

+0

@WesleyMurch請看我的編輯。這應該更清楚地解釋我的目標。 –

0

改變你的。htaccess的到:

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]*)(/|)([^/]*)$ /index.php?p=$1&profile=$3 [L] 
ErrorDocument 404 /redir404.php 

這將改寫網址如下:

example.com/home -> example.com/index.php?p=home&profile= 
example.com/home/user -> example.com/index.php?p=home&profile=user 

(我無法測試在.htaccess文件重寫規則,但正則表達式解析URL應該是正確的)