2013-08-28 61 views
2

我目前工作的一個博客,我想創建鏈接到我在下面的表格個別條款的博客文章鏈接:創建一個類似文件夾結構

http://www.mysite.com/health/2013/08/25/some-random-title 
         ------   ----------------- 
         |      | 
        category     title 

但是我不知道如何實現這個。

我發現了一些可以給我的URI。

$uri = $_SERVER["REQUEST_URI"]; 

然後,我會繼續提取所需的零件並對數據庫提出請求。 這似乎是一個非常非常愚蠢的問題,但我不知道如何在谷歌上查找這個(我試過......)但我究竟該如何處理鏈接?

我試圖解釋它一步一步:

在文章標題用戶點擊 - >使用新的URI重新加載頁面 - >我應該在哪裏處理這個新的URI又如何?如果請求路徑是這樣的:

index.php?title=some-random-article-title

我會做的index.php文件和讀取$ _GET數組,並進行相應的處理。但是,在這個問題的開始,我該如何處理這個建議的結構呢?

回答

4

您將需要幾件事情:

  1. 設置一個.htaccess重定向所有請求你的主文件,它會處理這一切,是這樣的:

    <IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/
    RewriteRule ^index\.php$ - [L] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule . /index.php [L] 
    </IfModule> 
    

    以上將重定向不存在的文件和文件夾的所有請求index.php

  2. 現在您要處理URL路徑,以便您可以使用PHP變量$_SERVER['REQUEST_URI']正如你所說的。

  3. 從那裏是相當多的分析它的結果,以提取所需的信息,你可以使用的功能parse_urlpathinfoexplode一個,這樣做。

使用parse_url這大概就是這樣做的最指示方式:

$s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "https" : "http"; 
$url = $s . '://' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; 
var_dump(parse_url($url)); 

輸出:

["scheme"] => string(4) "http" 
["host"] => string(10) "domain.com" 
["path"] => string(36) "/health/2013/08/25/some-random-title" 
["query"] => string(17) "with=query-string" 

所以parse_url可以很容易打破當前的URL,你可以看到。

例如使用pathinfo

$path_parts = pathinfo($_SERVER['REQUEST_URI']); 

$path_parts['dirname']將返回/health/2013/08/25/

$path_parts['basename']將返回some-random-title,如果它有一個擴展,它將返回some-random-title.html

$path_parts['extension']將返回空,如果有它將返回的延期.html

$path_parts['filename']將返回some-random-title,如果它有一個擴展,它將返回some-random-title.html

使用爆炸這樣的事情:

$parts = explode('/', $path); 
foreach ($parts as $part) 
    echo $part, "\n"; 

輸出:

health 
2013 
08 
25 
some-random-title.php 

當然這些只是例子你如何閱讀它。

你也可以使用的.htaccess做出的,而不是從一個文件處理的一切,例如具體的規則:

RewriteRule ^([^/]+)/([0-9]+)/([0-9]+)/([0-9]+)/([^/]+)/?$ blog.php?category=$1&date=$2-$3-$4&title=$5 [L] 

基本上上面會打破URL路徑,並在內部重定向到文件博客。使用合適的參數PHP的,所以使用URL樣本會重定向到:

http://www.mysite.com/blog.php?category=health&date=2013-08-25&title=some-random-title 

但是客戶端瀏覽器的URL將保持不變:

http://www.mysite.com/health/2013/08/25/some-random-title 

也有像我曾提到早期可能出現得心應手這個例如parse_urlpathinfo等功能,服務器變量,等...

+0

完美,謝謝!我現在就試試這個。 –

+0

太棒了!奇蹟般有效! –

+0

@MartinE。給它另一個閱讀有更多的內容,這可能是有趣的更新。 – Prix

1

這被稱爲語義URLs,它們也被稱爲段落URL。

您可以用.htaccess命令RewriteURL

防爆做到這一點:

RewriteURL ^(.*)$ handler.php?path=$1 

現在handler.php得到/health/2013/08/25/some-random-title,這是你的切入點。

+0

我想你的意思'RewriteRule',不'RewriteURL'。 – IMSoP

相關問題