2012-11-23 31 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应该是正确的)