2010-06-22 50 views
2

當我點擊了一個網站,我有一個給定的條目的註釋部分做一個URL重寫,網址如下:同時使用PHP GET方法

http://www...com/.../comments/index.php?submission=Portugal%20Crushes%20North%20Korea&submissionid=62&url=nytimes.com/2010/06/22/sports/soccer/22portugalgame.html?hpw&countcomments=3&submittor=johnjohn12&submissiondate=2010-06-21%2019:00:07&dispurl=nytimes.com

我想使它看起來像這樣網址:

http://www...com/.../comments/Portugal-Crushes-North-Korea-62

我知道這涉及到向.htaccess文件添加規則。我有兩個問題:

  1. 由於我在PHP中使用GET方法,醜陋的URL有一堆附加到它的變量。我不希望所有這些變量都出現在乾淨的URL中。是否有可能只包含乾淨的URL中的一些變量,但仍然有一個規則將其指向一個帶有所有變量的醜陋URL?

  2. 一旦我編寫了.htaccess規則,我是否會返回並更改源代碼中的鏈接以指向乾淨的URL?如果是這樣,當乾淨的URL沒有我想要傳遞的所有變量時,如何使用GET方法執行此操作?

由於提前,

約翰

回答

0

不,你不能離開變量並期待他們反正通過。如果你這樣做,信息不再在URL中,所以你沒有辦法得到它。

如果你想傳遞變量而不顯示它們,你可以使用post而不是get。

+0

如何進行POST時,到達評論部分的方式只是一個hyperl墨水? – John 2010-06-22 08:32:38

+0

@約翰:你不能。 – 2010-06-22 08:54:25

3

我不確定你爲什麼需要URL中的所有數據。您應該將提交標題,日期和作者等內容存儲在數據庫中,然後使用ID引用它。這樣一來,您的網址就會更短和更漂亮:

http://www.example.org/article.php?id=1

http://www.example.org/article/1/

您可以在.htaccess文件用一個簡單的重寫規則做到這一點,就像這樣:

RewriteEngine On 
RewriteRule ^articles/([0-9]+)/ article.php?id=$1 
+0

謝謝......在我看到您的評論之前,我實際上自己提出了這個想法。我想我會走這條路。 – John 2010-06-22 09:37:47

0

我加盟Sjoerd這個詞,但有很多方法可以像你想要的那樣重寫你的url!

Apache和(IIS太)支持網址,就像這樣:http://example.com/index.php/my-rewritten-url_62

function URISegment($segment) 
{ 
    $uri_array = explode('/',$_SERVER['REQUEST_URI']); 
    $uri_count = count($uri_array); 
    $returning_uri = array(); 

    for($i = 0;$i<$uri_count;$i++) 
    { 
     if(empty($uri_array[$i]) || $uri_array[$i] == "index.php") 
      unset($uri_array[$i]); 
     else 
      array_push($returning_uri,$uri_array[$i]); 
    } 

    if($segment < count($returning_uri)) 
     return $returning_uri[$segment]; 
    else 
     return false; 
} 

這工作,但您需要定義基礎URL過了,這需要在的開始被稱爲文件,並在每個圖像,腳本等實現調用。

function BaseURL() 
{ 
    if(isset($_SERVER['HTTP_HOST'])) 
    { 
     $base = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on' ? 'https' : 'http'; 
     $base .= '://'. $_SERVER['HTTP_HOST']; 
     $base .= str_replace(basename($_SERVER['SCRIPT_NAME']), '', $_SERVER['SCRIPT_NAME']); 
    } 
    else 
    { 
     $base = 'http://localhost/'; 
    } 
    return $base; 
} 

在此之後,你可以使用,而不是這樣的:

// http://example.com/?MyKey=Some-data 
$MyKey = $_GET['MyKey']; //which is the first item 
echo $MyKey; 
// results: Some-data 

此:

// http://example.com/?MyKey=Some-data 
$MyKey = URISegment(0); 
echo $MyKey; 
// results: Some-data 

你必須通過每一個相同的結果。

PS:

我喜歡這個解決辦法,因爲我需要他們喜歡我可以混合使用的URL類型:

example.com/index.php/index/evaled-article?some=db-stored&code=snipplet 

當然,你可以重寫你的URL像FRKT說:)

當然,如果你想隱藏index.php你需要使用mod_rewrite,因爲沒有辦法

+0

這不是很漂亮。爲什麼不使用mod_rewrite(或IIS的等價物)? – 2010-06-22 09:00:00

+0

爲什麼它不漂亮?這是他列出的問題的一個很好的解決方案。我認爲它是一個非常有用的URL重寫方式,另一件事,現在他有一個新的方面如何做到這一點,只使用php – 2010-06-22 09:17:05

+0

我不確定這屬於URL重寫的類別,但我同意它對於不能使用mod_rewrite的人來說,這是一個很好的選擇。 :-) – 2010-06-22 10:50:12