php:在url中摆脱?p =查询?

时间:2010-07-27 11:21:36

标签: php url

嘿伙计们,我不是在寻找mod_rewrite的东西或任何相关的东西。 我只是不确定这是否可能?

我正在使用if(isset($ _ GET ['p']))...来检查是否?p =在我的网址中设置了某个内容,如果不是$ foo =“bar”;如果设置了?p = ?p =某事 - > $ foo =“某事”。有我吗?

如果我现在手动输入?p = bar到我的网址我的网址中的字符串实际上是默认字符串。因为如果我的网址中没有??$ foo =“bar”;

我想知道是否就是这样我可以完全摆脱我的网址中的?p =部分? 如果默认字符串设置为我的$ foo变量我只想拥有一个没有任何分心的干净网址?p = bar在我的网址中。

抱歉奇怪的foo和bar的东西,我没有更好的例子;) 关于亚光

6 个答案:

答案 0 :(得分:2)

这是你要求的吗? (如果输入了默认值,请进行重定向)

if (isset($_GET['p'])) {
  if ($_GET['p'] == $defaultP) {
    header("HTTP/1.1 302 Found");
    header("Location: ".$urlWithoutQuery);
    exit(); // or whatever the function is.
  } else {
    $foo = $_GET['p'];
  }
} else {
  $foo = $defaultP;
}

请注意,必须先将此操作发送到客户端(因为它是标题的一部分)。

据我所知,在客户端上从URL中擦除内容的唯一方法是重定向或javascript(实际上,它也会重新加载,因此重定向可能要快得多)。

答案 1 :(得分:1)

看看这个mod_rewrite教程: tutorial

答案 2 :(得分:1)

使用Apache的mod_rewrite将example.com/?p=pagename更改为example.com/pagename

将它放在.htaccess文件中:

<IfModule mod_rewrite.c>
  RewriteEngine on

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^(.*)$ index.php?p=$1 [L,QSA]
</IfModule>

Voila,不是吗?p =

答案 3 :(得分:0)

如果您想要实现友好/干净的网址,您可能需要查看Net_URL_Mapper

答案 4 :(得分:0)

if ($_GET['p'] == 'bar') {
        parse_str($_SERVER['QUERY_STRING'], $q);
        unset($q['p']);
        header('Location: ' . $_SERVER['PHP_SELF'] . ($q ? "?" . http_build_query($q) : ''));
}

是一种巧妙的方式。如果它们存在,它不会擦除其他GET参数。

答案 5 :(得分:0)

  

如果是这样的话,我可以完全摆脱我的网址中的?p =部分?

是。摆脱它。没有人,只有你在你的网站上设置这些网址。因此,请编辑您网站的HTML并删除您想要的任何内容。