2011-11-02 137 views
0

我的網站當前顯示這樣的(上點擊廣告時):如何讓這個例子讓我的網站更友好?

hxxp://mysite.com/viewItem.php?id=10 

我喜歡的網址爲:

hxxp://mysite.com/dogs/121/border-collie-for-sale-to-good-home 

,其中「狗」永遠是一個常數,121總是$ row ['postId'];和「邊境牧羊犬出售至好家園」總是我的$ ['title'];

我知道這可能不會像在這裏的快速答案那麼容易,但如果你能讓我走向正確的方向,將不勝感激。我假設.htaccess的更改是按順序進行的,我試圖破譯該文件非常糟糕。

+0

mapfiles將對此有所幫助 – david

+0

mapfiles?我很確定這是一個htaccess問題,但是mapfiles是什麼? – Andi

+0

http://httpd.apache。org/docs/current/mod/mod_rewrite.html#rewritemap – david

回答

0

你可以做的事情是在viewItem.php腳本的頂部添加一個重定向。該重定向將需要檢查用於指示.htaccess文件被重寫的查詢參數。事情是這樣的:

if(!isset($HTTP_GET_VARS['rewritten'])) { 
    // use whatever behind the scenes stuff you need to construct the friendly URL 
    $friendly_url = "http://mysite/" . getCategory() . "/" . getID() . "/" . getTitle(); 

    // Now redirect the browser: 
    header("HTTP/1.1 301 Moved Permanently"); 
    header("Location: $friendly_url"); 
    exit(); 
} 

// business as usual, the rest of your viewItem.php script. 

所以,當這個PHP腳本嘗試處理不具有的查詢字符串參數rewritten的請求,將其重定向到URL的友好版本。如果它具有rewritten它通常會執行並處理請求。

現在在.htaccess文件中,你想重寫友好URL的醜陋URL,但是你需要在重寫中包含rewritten(我假設你的例子中的「121」是viewItem的「id」 .PHP腳本有:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^[^/]+/([^/]+)/ /viewItem.php?id=$1&rewritten=true [L] 

如果你離開了&rewritten=true那裏,它會進入一個重定向循環也可以在規則的括號內添加QSA,如果你想傳遞下去其他查詢字符串。重寫以防萬一你想能夠處理友好的URL,如:http://mysite/dogs/121/border-collie-for-sale/?sort=asc With [L,QSA],「sort = asc」被傳遞給viewItem/php。

所以這就是現在發生的事情,當有人點擊廣告和被採取http://mysite/viewItem.php?id=121

  1. 瀏覽器的地址欄中說http://mysite/viewItem.php?id=121請求被髮送到mysite的和viewItem.php訪問
  2. 頂部viewItem.php的看到,沒有rewritten PARAM,所以瀏覽器重定向到http://mysite/dogs/121/border-collie-for-sale
  3. 因爲這是一個301重定向,瀏覽器的地址欄更改爲http://mysite/dogs/121/border-collie-for-sale
  4. 熱曲est被重新發送給mysite,但是這一次,.htaccess會將/dogs/121/border-collie-for-sale重寫爲/viewItem.php?id=121&rewritten=true INTERNALLY,因此瀏覽器的位置欄不會更改。
  5. 請求使它回到viewItem.php,此時,腳本看到有一個rewritten參數,並執行它的平常業務和請求送達

您可以使用任何名稱爲參數只要沒有任何腳本正在使用它,就可以使用標誌。