2010-07-27 28 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並擺脫任何你想要的。