2014-12-01 55 views
1

說我有一個網站birdsovertheworld.com/,我想添加一些我知道的鳥的形式的內容。我(據我所知)可以做任何PHP參數/嵌套文件夾/ CMS

一)birdsovertheworld.com/bird/hummingbird/

B)birdsovertheworld.com/bird/show.php?bird=hummingbird

與a)一起看起來很愚蠢,因爲它需要我爲每隻鳥手動創建一個文件夾+索引文件。

與b)在另一方面會(再次,就我而言)傷害搜索引擎優化和可讀性。

我熟悉的CMS不會用於我的目的(WordPress,Joomla)+我會在這種特殊情況下使用,而不是使用其中一種。

我的問題是: - 我怎麼能實現URL易於閱讀的用戶和搜索引擎沒有創建的文件夾和手動索引文件和沒有與實例B要去哪裏?

謝謝

+0

你使用的是Apache嗎? – JohnKiller 2014-12-01 19:56:08

+0

是的,目前我是:-o? – TheG1 2014-12-01 19:57:05

回答

0

a)實際上是一個有效的選項。我們通過強制Apache將特定腳本作爲PHP讀取,即使它們沒有文件擴展名也是如此。

所以,「鳥」是一個PHP腳本讀取URL叫做包括/生成內容求出根據URL字符串的內容:

$called = $_SERVER['REQUEST_URI']; 
$parts = explode("/",$called); 
$birdname = $parts[1]; 
switch($birdname) { // or whatever logic. 

Apache的配置使用ForceType指令的應用程序/ X-的httpd-PHP5。

0

如果你看一下,例如,到WordPress .htaccess文件,你會看到這樣的事情:

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

這告訴Apache重定向正由瀏覽器訪問的任何不存在的文件或文件夾,到index.php

然後,在PHP端,您將得到$_SERVER['REQUEST_URI']變量中原始請求的url。

最後,你可以使用explode(...)訪問被請求的路徑:

$path = explode('/', $_SERVER['REQUEST_URI']); 
switch($path[1]){ 
    case 'bird': 
     //do your things 
     break; 
    default: 
     //404 
} 

請記住,你必須妥善處理404 errors,因爲Apache將不知道是否特定的一隻鳥的存在與否。