【问题标题】:How do I make clean url?如何制作干净的网址?
【发布时间】:2014-02-01 08:31:46
【问题描述】:

我想为我的网站制作干净的网址。如何更改 htaccess 文件。我原来的链接那个

这是我原来的链接

  **http://www.tangailbazar.com/adview_details.php?ID=9014&show=Hot%20and%20Cool%20Water%20Filter**

我想变成这样

    http://www.tangailbazar.com/Hot-and-Cool-Water-Filter

我的代码在这里。

   RewriteEngine On
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteRule /^(.*) adview_details.php?show=$1 [PT,QSA]

我的帖子链接从哪里获得这样的价值

    <a href="view-items-details.php?ID=<?php echo $row['sl'];?>&show=<?php echo $row['title'];?>">View Details</a>

在 adview_details 页面中我已经编写了代码

    <?php


   $id=$_GET['ID'];
   $id1=$_GET['show'];

   ?>
   <?php 
   $SQL="select * from tb_classified where sl='$id' and title='$id1'";
   $obj->sql($SQL);

    while($row = mysql_fetch_array($obj->result))

    {

  echo $row['title'];
      echo $row['description'];
  }
  ?>

【问题讨论】:

  • 如果它是一个重要的数字,您必须将 9014 嵌入到 URL 或将 Hot-and-Cool-Water-Filter 映射回它。
  • 堆栈溢出使用的方法是包含 id 和问题标题,但仅通过其 ID 查找问题(标题对于制作干净的 URL 很有用,即使从技术上讲它是可选的)
  • 您的脚本易受 SQL 注入攻击;你应该阅读how to prevent them

标签: php .htaccess url


【解决方案1】:

您正在寻找一个名为 mod_rewrite 的 Apache 模组。具体来说(来自文档):

另一方面,如果您希望将请求的 URI 作为查询字符串参数传递给 index.php,则可以将该 RewriteRule 替换为:

RewriteRule (.*) adview_details.php?show=$1 [PT,QSA]

请注意,这些规则集可以在 .htaccess 文件中使用,也可以在块中使用。

【讨论】:

    【解决方案2】:
    <?php 
    $title = str_replace(' ', '-', $row['title']) 
    ?>
    <a href="<?php echo "/".$title ;?>">View Details</a>
    

    输出网址http://www.tangailbazar.com/Hot-and-Cool-Water-Filter 但这不起作用,为什么?因为你不能制作一个带有条件的url,而对mysql的请求需要两个条件。 也许您应该将您的网址更改为http://www.tangailbazar.com/1/Hot-and-Cool-Water-Filter 如果您遵循我的建议,您应该更改代码。 htaccess 变成了

    RewriteRule ([0-9]?)/([a-zA-Z_-]+) adview_details.php?ID=$1&show=$2 [PT,QSA]
    

    以及您应该使用的网址

    <a href="<?php echo "/".$row['sl']."/".$title ;?>">View Details</a>
    

    【讨论】:

    • 我用过但不显示帖子
    【解决方案3】:

    首先引起我注意的是,您的常规 URL 一开始并不那么干净。我建议您删除空格并将它们更改为连字符 - 如果可能的话。 URL 也不区分大小写,因此实际上没有使用大写字符,但使用它们是个人喜好,尽管它会降低它们的可读性,并且在重写时需要额外的过程来更改它们。

    在重写 URL 时,您应该将 URL 视为部分。域名分为:子域名(www)、域名(tangailbazar)和顶级域名(com)。域开始清理后(您也可以对域进行大量重写,但在您的情况下您不会)。

    为了让您的重写过程清晰和简单(因为使用 mod_rewrite 重写 URL 会让人头疼),您希望重写 URL 的每个部分(斜线之间)都转换为原始 URL 中的参数。因此,在您的情况下:ID=9014&amp;show=Hot and Cool Water Filter 是应该在您的干净 URL 中使用的两个参数。重写 URL 时,您将选择键(参数)IDshow 的值,并在干净的 URL 中使用它们。在您的情况下,您需要干净 URL 中的 ID 参数,否则您永远无法加载目标 URL。

    RewriteRule ^.+/(.+)/(.+)+$ adview_details.php?ID=$1&show=$2 [L]
    

    此规则将更改以下请求:

    www.tangailbazar.com/9014/Hot%20and%20Cool%20Water%20Filter
    

    进入:

    www.tangailbazar.com/adview_details.php?ID=9014&show=Hot%20and%20Cool%20Water%20Filter
    

    这是您在这种情况下可以做的最好的事情,否则您将不得不更改目标 URL 的结构。

    您需要掌握的重要一点是,名称 URL 重写具有误导性,您实际上并没有重写任何东西,您将请求的 URL 从浏览器转换为您所在页面所在的 URL。因此,它更像是“URL 翻译”,然后是“URL 重写”。在创建用户友好的 URL 时,您大部分时间都是从 URL 中删除参数键 (show=) 和文件扩展名 (.php) 以使其更具可读性。

    您将始终需要在 URL 中使用动态部分,并且可以清除静态部分。

    我希望这将帮助您解决问题,或者至少在重写 URL 时弄清楚一些事情。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-18
      • 2011-06-25
      • 2013-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多