2011-08-29 63 views
0

即使搞清楚如何編寫谷歌搜索來解決這個問題,我也很難。根據網址提取數據庫中的數據(又名DIGG)

如果你點擊了在Digg故事卻讓這一切像digg.com/news/science/why_the_world_is_tilted的URL,而不是digg.com/reader.php?r=news&s=science&t=why_the_world_is_tilted

我敢肯定,他們沒有幾百萬的子文件夾,並且我記得讀一些4年之前解釋了它是如何工作的,但我不記得再次查看它。

回答

1

如果你的服務器運行的是Apache和mod_rewrite的安裝,你可以創建一個名爲的.htaccess包含此文件:

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] 
</IfModule> 

這將路徑發送到請求的index.php在var $ _GET [」 q']。 如果路徑是一個現有的文件或目錄,它不會發送到index.php的路徑。

2

如果您使用的是Apache,則可以使用mod_rewrite來完成此操作。我不是這方面的專家,但是如果你搜索一些mod_rewrite教程,你可以找到一些例子,其中漂亮的URL在Web服務器上不可見地轉換爲不同的查詢字符串。

2

有兩種基本方法是:

  1. 在Web服務器解析URL,你想要的數據位,並將其轉換爲查詢字符串;這通常通過mod_rewrite
  2. 從環境中獲取URI並提取自己想要的位。大多數優秀的Web框架將爲您提供一種方法來爲您做到這一點。

例如,在Catalyst你可以寫:

package My::Application::Controller::News; 
# … 
# :Path without an argument means the root for the controller. 
# The controller is news so: /news/ 
# :Args(2) means with two arguments 
sub article :Path :Args(2) { 
    my ($self, $c, $category, $article_name) = @_; 
    # … 
} 

而且$category將填充"science" and $ ARTICLE_NAME with 「why_the_world_is_tilted」`

1

你說什麼是clean url's。這種模式通常用於MVC架構。