在htaccess中创建动态URL

时间:2011-05-01 00:51:31

标签: php .htaccess

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

我的网址通常如下:

view.php?mode=prod&id=1234

我想做的是从网址获取id,进行数据库查询,然后将从DB返回的标题放入网址。类似的东西:

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

我知道有些人用phpbb论坛网址和主题完成了这个,我试图将代码跟踪到用新标题字符串URL替换实际URL的地方,但没有运气。

我知道我可以使用id重写URL:

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

PHP中是否有办法覆盖显示的网址?

3 个答案:

答案 0 :(得分:6)

目前您想知道如何将丑陋的网址(例如/view.php?mode=prod&id=1234)转换为漂亮的网址(例如/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。然后照常进行。

答案 1 :(得分: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
    }

当然,您必须使用此代码来制作应用程序

我希望这会有所帮助

答案 2 :(得分:0)

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