2014-12-01 54 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将不知道是否特定的一只鸟的存在与否。