2010-07-27 96 views
-1

嘿家伙,我不是在寻找一个mod_rewrite的东西或任何相关的东西。 我不确定这是否可行?我使用if(isset($ _ GET ['p']))...来检查是否?p =在我的url中设置了某些东西,如果不是这样的话$ foo =“bar”;如果a p =被设置,例如?p =东西 - > $ foo =“东西”。找到了我?php:摆脱?p =在url中查询?

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

我想知道如果是这种情况,我可以完全摆脱?p =部分在我的网址? 如果默认的字符串设置为我的$ foo变量,我只是想有一个干净的网址没有任何distractign?p =酒吧在我的网址。

遗憾的怪异foo和酒吧的东西,我没有更好的例子;) 问候亚光

+0

你怎么没有更好的例子?你不是真的有你的网站吗? – 2010-07-27 11:40:46

+0

你必须重新问这个问题,措词清楚,并与现实世界的考试 – 2010-07-27 12:04:00

+0

你刚才所说的有各种各样的错误。 – 2010-07-27 12:09:47

回答

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参数,如果它们存在。

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

看这个mod_rewrite的教程: tutorial

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> 

瞧,没有p =

+0

为什么favicon.ico的特殊规则? – 2010-07-27 11:39:14

+0

如果我设置,这意味着我可以调用只是mydomain.com/pagename,它实际上是火灾mydomain.com?p = pagename是吗? – matt 2010-07-27 11:43:44

+0

@mathiregister这实际上并没有回答你的问题 – 2010-07-27 12:02:49

0

如果是这种情况,我可以完全摆脱?p =部分在我的网址?

是的。只是摆脱它。除了你在你的网站上设置这些网址之外没有其他人。所以,编辑你的网站的HTML并摆脱任何你想要的。