0

我想使用 .htaccess 文件来制作友好的 URL。但是当我点击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

当我单击链接时,它会显示 URL,http://mydomain.com/category.php?id=Rohit 而不是http://mydomain.com/website/rohit.

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

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

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

4

3 回答 3

2

改变

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

<a href="website/<?php echo "{$row['name']}"; ?>">Example </a>
于 2012-12-30T10:38:31.970 回答
2

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

<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; 
   }
}
于 2012-12-30T10:45:14.597 回答
0

如果您使用的是 url 重写,那么在 href 中您必须自己传递 SEO 友好的 url;对于最佳实践,创建一个通用函数并将您的参数传递给该函数并为 href 生成 SEO 友好的 url;

或者在 href 硬编码 href url 中创建类似 category.php?id=123 的网址,例如 website/123

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

于 2012-12-30T10:57:19.817 回答