URL RewriteRule

时间:2012-01-19 16:48:35

标签: regex apache .htaccess mod-rewrite url-rewriting

我试图重写我的网址,我在htaccess中有以下内容,其中pageid是每个页面的mysql id,标题是页面标题。

RewriteRule ^([^/]*)/([^/]*)\.html$ content.php?pageid=$1&title=$2 [L]

基于此规则的当前网址结构为: http://domian.com/3/Contact.html

并希望将其更改为: http://domian.com/Contact.html

我也有这个改变URL的php函数:

  function createPageLink($id)
  {
      global $db, $core;

      $sql = "SELECT id, slug FROM pages WHERE id = '".(int)$id."'";
      $row = $db->first($sql);

      $slug = $row['slug'];

      if ($core->seo == 1) {
          $display = $core->site_url . '/' . intval($id) . '/' . sanitize($slug) . '.html';
      } else {
          $display = $core->site_url . '/content.php?pageid=' . intval($id);
      }
      return $display;
  }

所以基本上删除URL后的数字,只有标题。

我知道它非常简单,但它让我疯狂。感谢

3 个答案:

答案 0 :(得分:4)

你正在寻找这个,

RewriteRule ^([^/]*)\.html$ content.php?title=$1 [L]

以下内容将与两者相匹配。

RewriteRule ^([^\/]*)?/?([^\/]*)\.html$ content.php?pageid=$1&title=$2 [L]

当我测试它时,使用了以下文件。

<IfModule mod_rewrite.c>
    # Turn on URL rewriting
    RewriteEngine On

    RewriteBase /

    # Allow any files or directories that exist to be displayed directly
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    # Rewrite all other URLs to index.php/URL
    RewriteRule ^([^\/]*)?/?([^\/]*)\.html$ index.php?part1=$1&part2=$2 [L]
<IfModule mod_rewrite.c>

要测试的index.php文件。

<?php
var_dump($_GET);
var_dump($_SERVER);
?>

答案 1 :(得分:1)

好吧,首先你需要为每个页面制作一些令牌。例如:令牌联系人参考id 1.您可以使用数组或switch来执行此操作。

PHP示例

$token_ids = new array();
$token_ids['Home'] = 1;
$token_ids['Contact'] = 2;

$current_token = $_GET['title']; // following your example

if(!isset($token_ids[$current_token])) {
  // ERROR or REDIRECT like to home:
  $current_token = 'Home';
}

// similar to $_GET['pageid'] of example
$current_token_id = $tokens_id[$current_token];

你也可以在MySQL上做,只需要为每个页面保存一个唯一的令牌。像:

id | token     | page_title
1    Home        Hello!
2    Contact     Contact us!

答案 2 :(得分:0)

对我来说,如果你真的不需要id,你可以简单地执行以下操作(不要忘记在搜索数据库之前清除标题):

RewriteRule ^(.*)\.html$ content.php?title=$1 [L]