【问题标题】:How to rewrite url with post title slug?如何用帖子标题 slug 重写 url?
【发布时间】:2011-09-19 06:09:49
【问题描述】:

考虑一个网址

www.example.com/paper-ads-details.php?req=43397&rnd=1308546000

我想将此网址更改为:

www.example.com/jobs-in-chanai.php

req=43397 指向标题为 在chanai 工作 的帖子 我该如何重写它?请帮帮我。

【问题讨论】:

  • 为什么要在友好的网址中使用.php?除此之外,您真的希望在友好的 url 中包含页面 ID,这样您就不必降低代码效率(通过 slug 搜索)。
  • 感染我想隐藏参数并想使用像wordpress这样的slug。
  • 为什么不同时包含两者,例如example.com/43397-jobs-in-chanai
  • @Sohail 您可以使用RewriteMap 功能,docs.. 但不能在 .htaccess 文件中声明 RewriteMap 指令。
  • 这个问题是cross posted on ServerFault 由同一个用户以不同的名字和不同的细节提出的,只是在解决他的问题方面更进一步。 OP 将其标记为已解决。

标签: php .htaccess url-rewriting


【解决方案1】:
  1. 如果要使用.htaccess,需要编写脚本静态生成重写规则,所以.htaccess文件中包含
    RewriteRule ^jobs-in-chanai.php /paper-ads-details.php?req=43397&rnds=1308546000 [L]

  2. 这样的行
  3. 在 PHP 中处理请求开始时的路由。解析(和过滤)url 以根据 slug 而不是 req 和 rnds 参数查找帖子。如果需要,缓存结果。

【讨论】:

    【解决方案2】:

    在您的数据库中,您需要一列“clean url”或“slug”以及提到的 .htaccess 规则。

    我使用这个函数(不是我的代码):

       function makeSlug($string, $force_lowercase = true, $anal = false) {
         $strip = array("~", "`", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "=", "+", "[", "{", "]",
                       "}", "\\", "|", ";", ":", "\"", "'", "‘", "’", "“", "”", "–", "—",
                       "—", "–", ",", "<", ".", ">", "/", "?");
        $clean = trim(str_replace($strip, "", strip_tags($string)));
        $clean = preg_replace('/\s+/', "-", $clean);
        $clean = ($anal) ? preg_replace("/[^a-zA-Z0-9]/", "", $clean) : $clean ;
        return ($force_lowercase) ?
            (function_exists('mb_strtolower')) ?
                mb_strtolower($clean, 'UTF-8') :
                strtolower($clean) :
            $clean;
    
    }
    

    我将它保存在一个列中并执行以下操作:

    "SELECT * FROM `content` WHERE `clean_url` = '" . mysql_real_escape_string($cleanURL) . "'";
    

    【讨论】:

    • slug 已经可用。如何使用 htaccess 在 url 中调整它。
    • $str = iconv('UTF-8', 'ASCII//TRANSLIT', $str); 去掉像元音变音这样的特殊字符是有意义的。除此之外,为什么你的 makeSlug 函数中有 html 实体? PHP 不会将它们解析为字符..
    【解决方案3】:

    经过艰苦的努力,我找到了方法,现在将其分享给其他用户... 假设所需的 Url 是 www.example.com/programmer-Jobs-in-luton <br> 规则将类似于...
    RewriteRule ^([a-zA-Z0-9-]+)$ job-details.php?slug=$1 [L]

    【讨论】:

      猜你喜欢
      • 2014-11-10
      • 2016-10-24
      • 2021-01-30
      • 2017-06-01
      • 2020-10-22
      • 1970-01-01
      • 2016-09-04
      • 2012-10-18
      • 2011-05-30
      相关资源
      最近更新 更多