2011-05-01 80 views
4

我正在尝试编写一个.htaccess文件,这会使我的网址对搜索引擎更具吸引力。我基本知道如何做到这一点,但我想知道如何动态地做到这一点。在htaccess中创建动态网址

我的URL通常是这样的:

view.php?mode=prod&id=1234 

我想要做的就是把ID从URL,做一个数据库查询,然后把标题从数据库返回到的URL。是这样的:

/products/This-is-the-product-title 

我知道有些人已经与phpBB论坛的网址和主题来实现这一点,我已经尽力向下跟踪代码,它替换为新标题字符串URL实际的URL,但没有运气。

我知道我可以重写URL只用ID,如:

RewriteRule ^view\.php?mode=prod&id=([0-9]+) /products/$1/ 

是否有PHP的方式覆盖显示的网址是什么?

回答

6

目前您想知道如何将您丑陋的URL(例如/view.php?mode=prod&id=1234)转换为漂亮的URL(例如/products/product-title)。反过来看看这个。

你想要的是有人打字/products/product-title实际带他们到/view.php?mode=prod&id=1234可以访问的页面。

即您的规则可能如下:

RewriteRule ^products/([A-Za-z0-9-])/?$ /view.php?mode=prod&title=$1 

然后在view.php做基础上,title找到id查找。然后照常进行。

+0

那么这是否意味着我需要回顾并编辑我现有的站点间链接? – chaoskreator 2011-05-01 01:10:14

+0

是的,它的确如此。我想这使得这个答案更多的是未来的解决方案。为了使旧的链接工作,你可以根据你的'id'进行查找,找到标题,然后重定向到'/ products/looks-up-title'。没有改变'.htaccess',只是你的'view.php' – Matthew 2011-05-01 01:12:54

+0

Eeesh。好吧,好吧,看起来我有很多链接重写... – chaoskreator 2011-05-01 01:34:25

0

一种方法是输出一个Location:标题来强制重定向到所选的URL。

2

这样做的一种方式,就像大多数mvc框架一样。您可以将所有页面重定向到同一个index.php文件,并使用脚本确定要加载的页面。

的.htaccess

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

和你的PHP文件将有这样一个脚本:

// get the url 
    $uri = (isset($_SERVER['REQUEST_URI']))?$_SERVER['REQUEST_URI']: false; 
    $query = (isset($_SERVER['QUERY_STRING']))?$_SERVER['QUERY_STRING']: ''; 
    $url = str_replace($query,'',$uri); // you can edit this part to do something with the query 
    $arr = explode('/',$url); 
    array_shift($arr); 

    // get the correct page to display 
    $controller =!empty($arr[0])?$arr[0]:'home'; // $arr[0] could be product/ 
    $action = isset($arr[1]) && !empty($arr[1])?$arr[1]:'index'; // $arr[1] can be product-title 
    } 

当然你必须努力验证码时尚应用程序

我希望这可以帮助