如果变量为空,我想设置一个 $_GET 变量。但它似乎不起作用。
这是我到目前为止所拥有的。
if(!$_GET["profile"])
{
$_GET["profile"] = null;
}
编辑
我尝试这样做的全部原因是因为我在我的 .htaccess 中设置了两个虚 URL,但我试图弄清楚如何跳过第二个虚 URL,所以我不需要去 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
就像我说的,为了做到这一点,而不是将我发送到我的错误文档,我需要将我的 URL 设置为 http://ncms.us/home/才能工作。
首先,此行将生成一个"未定义的索引"通知:
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;
将值注入超全局有时会在其他脚本中产生奇怪的副作用,因为它们具有全局访问权限。最好避免它。
使用 !isset($_GET["profile"]) 查看它是否未设置。
http://php.net/manual/en/function.empty.php
empty( )
— 确定变量是否为空
将 .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 的正则表达式应该是正确的)