【问题标题】:Is this a correct practice to generate friendly URLs?这是生成友好 URL 的正确做法吗?
【发布时间】:2013-05-23 00:54:13
【问题描述】:

我正在生成 AJAX 调用的 url,就像我解释 here 一样。 (请看这个帖子,实际需要了解)。

一些网址有特殊字符,所以会是这样的:

http://myweb.com/ni%C3%B1o/pull%26bear/jacket%20shirt%20pants%20underwear%20hat/23

我想创建友好的 URL,删除一些字符并将第三个参数限制为最多只有三个单词。结果会是这样的:

http://myweb.com/nino/pullbear/jacket-shirt-pants/23

所以 php 将能够知道我传递的参数我在我的数据库中为每个 VARCHAR 添加了一个新的列,并带有漂亮的 url 转换。我解释一下,是这样的:

ID  SEX   SEX_PRETTY  BAND       BRAND_PRETTY  DESCRIPTION                       DESCRIPTION_PRETTY   AGE
1   NIÑO  NINO        PULL&BEAR  PULLBEAR      JACKET SHIRT PANTS UNDERWEAR HAT  JACKET-SHIRT-PANTS   10
2   NIÑA  NINA        ZARA       ZARA          JEANS BIKINI DRESS SWEATER        JEANS-BIKINI-DRESS   13

AJAX 调用 php,在 php 中我做了一个 pretty 列到数据库中的普通列 的转换。

我认为这是做我想做的事的唯一方法,不是吗?任何帮助或建议将不胜感激,如果您需要更多信息,请告诉我,我会编辑帖子。

【问题讨论】:

    标签: php mysql ajax friendly-url seo


    【解决方案1】:

    你所做的是正确的。 URL 中的值只是参数,因此您可以使用它们从数据库中选择行。当您解析您的 URL http://myweb.com/nino/pullbear/jacket-shirt-pants/23 时,它会返回类似

    <?
    $sex = 'nino';
    $brand = 'pullbear';
    $description = 'jacket-shirt-pants';
    $age = '23';
    ?>
    

    然后您可以使用该信息从数据库中选择某些内容。为简单起见,我将连接查询,但请确保您执行一些 validation or use parameterized queries

    <?
    //WARNING: POSSIBLE UNSAFE EXAMPLE, DONT USE DIRECTLY IN PRODUCTION
    
    $query = "SELECT * FROM Table WHERE SEX_PRETTY='$sex' AND BRAND_PRETTY='$brand' AND DESCRIPTION_PRETTY='$description' AND AGE='$age'";
    
    //now in your results you can use the `SEX`, `BRAND` and `DESCRIPION` columns to show information
    ?>
    

    请记住,如果您想唯一标识单个产品,最好在 SEX_PRETTYBRAND_PRETTYDESCRIPTION_PRETTYAGE 的组合列上创建 UNIQUE INDEX

    此外,由于您在谈论使用 JSON,请记住并非所有特殊字符都被允许,因此您可能需要在输出中对它们进行编码。检查json-character-encoding

    【讨论】:

    • 非常感谢@Hugo Delsing 的回答。好吧,我只为示例做了这张表,因为我认为它比我拥有的更清晰。我还有另一个小答案:我的表格中的行或多或少地重复了 20 次。所以我认为在另一个表中分开 pretty colum 不必重复信息。所以你认为这是个好主意还是只会混淆结构?
    • 我认为“SEX”应该是一个带有名称和漂亮名称的单独表,然后将产品链接到该表。品牌也是如此。所以每个品牌都在品牌表中一次,产品链接到该表。
    • 正如我所说,这不是我工作的表的真实结构。但我理解你的想法。谢谢大家,你们帮了我很多。 :)
    猜你喜欢
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 2011-02-17
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    相关资源
    最近更新 更多