如何在为动态网址使用htaccess重写时制作href

时间:2012-12-30 10:32:03

标签: php .htaccess url-rewriting href

我想使用.htaccess文件来制作友好的网址。但是当我点击href

中指定的链接时
<a href="category.php?id= <?php echo "{$row['name']}"; ?>">Example </a>

$row['name']是动态的。数据存在于MySQL数据库中。

代码(category.php):

<?php
if($_GET['id']){
  $result = $_GET['id'];
}
echo "this is {$result} page";
?>

这只是将传递的参数存储在$result变量中并在屏幕上显示。

代码(.HTACCESS文件):

Options -Multiviews
RewriteEngine On
RewriteRule   ^website/(.+)$   category.php?id=$1

当我点击该链接时,它会显示http://mydomain.com/category.php?id=Rohit之类的网址 而不是http://mydomain.com/website/rohit

但是,当我手动将URL写入http://mydomain.com/website/rohit时,它会显示相同的页面。这表示.htaccess文件正在运行。我想点击单词示例时直接显示上面的URL。

一个例子
当我们点击维基百科中的页面barack obama时,它会转到http://en.wikipedia.org/wiki/Barack_obama,但原始链接也可以使用http://en.wikipedia.org/w/index.php?title=Barack_obama。两个页面都显示相同的数据。 它们不会向用户显示第二个URL,而是显示另一个URL。我希望得到同样的结果。

如何编写链接,以便重写URL?

3 个答案:

答案 0 :(得分:2)

更改

<a href="category.php?id= <?php echo "{$row['name']}"; ?>">Example </a>

<a href="website/<?php echo "{$row['name']}"; ?>">Example </a>

答案 1 :(得分:2)

使用apache mode_rewrite和mod_replace可以做到这一点,但我不推荐它。因为我想你想以两种方式支持它而你使用PHP我会创建一个函数(或类/方法)来重写你的书面网址。 即:

<a href="<?php getUrl('category.php', $row['name']}) ?>">Example</a>

这样就可以根据用户请求处理不同的URL。

function getUrl($phpfile, $argument) {

   if ('<some logic to check if user request is rewritten') {    
      return "website/" . $argument; 
   } else {    
      return $phpfile . "?id=" . $argument; 
   }
}

答案 2 :(得分:0)

如果您正在使用网址重写,那么在href中您必须自己传递SEO友好网址;为了最佳实践创建一个共同的功能,并将您的参数传递给该函数,并为href生成SEO友好的URL;

或者代替创建类似于category.php的网址?id = 123 in href hardcode href url like website / 123

或者您必须定义规则,例如,如果用户访问您的网页,例如category.php?id = 123,然后将用户重定向到网站/ 123