2009-07-03 76 views
4

是否有可能重新寫(Apache的MOD-重寫)從以下網址:我可以重寫這樣的網址嗎?這是個好主意嗎?

http://www.example.com/view.php?t=h5k6這個http://www.example.com/h5k6

這樣做的理由重新寫的是,URL必須很短(有點像一個小型的URL服務)。

這個新的URL會不會打到我的view.php頁面?它是否仍然能夠使用超級全局數組GET($_GET)來訪問變量t?我仍然想要我的index.php頁面映射到這個http://www.example.com

我也很感謝評論這可能有影響,因爲我有點小菜。 :)

感謝所有

回答

12

mod-rewrite的術語工作的其他方式。請求將以這種http://www.example.com/h5k6的形式出現,並將在內部重寫爲http://www.example.com/view.php?t=h5k6。這樣,您的PHP腳本就可以對請求做出響應,就好像它們是以GET參數的形式發送的,但用戶可以非常友好地看到這些URL。

因此,您不必更改任何PHP腳本,並且仍然可以從GET數組訪問參數t

在你的情況,規則是這樣的:

RewriteRule ^/(.*) /view.php?t=$1 

你可能想更具體的瞭解你接受(而不只是包羅萬象的.*表達)是什麼。此外,如果此目錄中的其他頁面不是view.php,則可能需要此規則的例外。

2

嘗試其中之一:

# /view.php?t=h5k6 externally to /h5k6 
RewriteCond %{THE_REQUEST} ^GET\ /view\.php 
RewriteCond %{QUERY_STRING} ^([^&]*&)*t=([^&]+)&?.*$ 
RewriteRule ^/view\.php$ /%2 [L,R=301] 

# /h5k6 internally to /view.php?t=h5k6 
RewriteRule ^/([0-9a-z]+)$ view.php?t=$1 [L] 
1

是的,這是絕對有可能,將有正是你描述的效果。但是,你的術語是倒退的。 「short」URL是瀏覽器原始發送給服務器的URL,它被重寫爲更長的版本,然後實際處理並導致PHP請求。

幾乎唯一的問題是,如果不小心使用,這可能會導致搜索引擎索引這兩個網址並將它們視爲重複的內容,這對您的排名不利。一方面,通過從不在任何地方發佈「長」版本(即,所有站點內部鏈接具有「短」格式),這可以(並且應該)避免。但是,由於您可能會意外發布它們(這可能很容易發生),因此您還應該使用link rel="canonical"來告知搜索引擎您希望將您的網頁編入索引的URL。

相關問題