.PHP/.HTACCESS |手动设置 GET 变量以阻止虚 URL 干扰



如果变量为空,我想设置一个 $_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 的正则表达式应该是正确的)

相关内容

  • 没有找到相关文章