繁体   English   中英

如何使用htaccess重写动态URL时制作href

[英]how to make href while using htaccess rewrite for dynamic url

我想使用.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

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

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

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

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

更改

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

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

可以使用apache mode_rewrite和mod_replace来做到这一点,但我不建议这样做。 因为我猜您想同时支持这两种方式,并且您正在使用PHP,所以我将创建一个函数(或类/方法)来重写您编写的url。 即:

<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; 
   }
}

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

或代替在href硬代码href网址(例如website / 123)中创建类似category.php?id = 123的网址

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM