【问题标题】:Different addresses for different products不同产品的不同地址
【发布时间】:2015-06-21 08:45:55
【问题描述】:

我有一只桌鞋(id,shoename,color,brand,price,imagename,available)。我正在尝试通过我的网站在线销售鞋子。目前正在发生的事情是,catalog.php(我网站上的一个页面)显示了我表“鞋子”中的所有鞋子。这是循环内的代码。

echo "<div class='shoe-view'>";
 echo "<img class='show-view-image' src='scripts/shoes/uploads/".$result["imagename"]."' alt='".$result["imagename"]."'/>";
 echo "<form action='viewshoe.php' method='post'>";
  echo "<button value='".$result["id"]."' name='messagebutton' class='send-message'>View Shoe</button>";
  echo "<input value='".$result["shoename"]."' name='shoename' type='hidden'/>";
 echo "</form>";
echo "</div>";

每只鞋子都有一个按钮查看鞋子,这个按钮指向 viewshow.php(我网站上的另一个页面),其中显示了鞋子的所有详细信息。这是它的样子:

 echo "<div class='shoe-view'>";
  echo "<img class='show-view-image' src='scripts/shoes/uploads/".$result["imagename"]."' alt='".$result["imagename"]."'/>";

  echo "<p class='sub-heading desc catalogfont' style='color:rgb(184, 55, 60);'>".$result["shoename"]."</p>";
  echo "<p class='content catalogfont' style='font-weight:bold;'>".$result["price"]."</p>";
  echo "<p class='content catalogfont' style='font-weight:bold;'>".$result["Color"]." : ".$result["brand"]."</p>";
  echo "<form action='buyshoe.php' method='post'>";
   echo "<button value='".$result["id"]."' name='messagebutton' class='send-message'>Buy Shoe</button>";

  echo "</form>";
 echo "</div>";

这是我的问题:像 Flipkart.com 这样的电子商务网站在其网站上的每种产品都有不同的地址。 访问http://www.flipkart.com/mens-footwear/casual-shoes/pr?sid=osp%2Ccil%2Ce1f&otracker=hp_nmenu_sub_men_0_Casual+Shoes 并查看所有商品在您打开产品时都有不同的地址。这种做法有利于共享产品和搜索引擎优化。我不确定如何为我的每种产品获取不同的地址。我是否在上传过程中制作了一个不同的 php(例如 shoe1.php)文件并使用 viewshoe.php 重定向到我的 shoe1?因为目前我所有的鞋子都有一个地址,viewshoe.php。

【问题讨论】:

  • 在有这么多开源网店解决方案可用的情况下,您为什么要重新发明轮子?

标签: php seo


【解决方案1】:

您熟悉在 PHP 中使用$_GET 查询字符串变量吗?您只需这样做:

echo '<a href="shoepage.php?shoe_id='.$result['id'].'">'.$result['shoename'].'</a>';

然后在shoepage.php 上从数据库中获取具有匹配 ID 的鞋子。为了获得更好的 SEO,您无疑会希望使用鞋子的名称(可能标准化为 URL 友好,例如 ?shoe=funky-seven-shoes)而不是数据库 ID;为这些创建一个新列。

要获得更多 SEO,您需要查看 URL 重写(使用 .htaccessmod_rewrite)以获取映射到 shoepage.php?shoe=funky-seven-shoes 等的 /shoe/funky-seven-shoes 等 URL。这是一个示例 .htaccess 重写规则 (假设你的鞋子 URL 标识符只有字符 a-z, A-Z, 0-9、下划线和破折号,根据需要修改):

RewriteEngine on
RewriteBase /
RewriteRule ^shoe/([a-zA-Z0-9_-]*)$ shoepage.php?shoe=$1

您还可以在表单中使用方法 GET 而不是 POST 来使查询字符串在地址栏中可见。对于未明确请求更改服务器/数据库状态(即插入、更新或删除)的所有请求,推荐使用 GET 方法。

【讨论】:

  • 谢谢,是的,我熟悉 php 中的 $_GET 查询字符串,我不熟悉的是 mod_rewrite!再次感谢。
  • @user3783952 学习愉快。我添加了一个进行重写的示例 .htaccess 文件。如果你想在 URL 中添加类别等,那么你需要做更多的事情;喜欢RewriteRule ^shoe/([a-zA-Z0-9_-]*)/([a-zA-Z0-9_-]*)$ shoepage.php?category=$1&amp;shoe=$2
【解决方案2】:

您的方法有各种错误,但要回答您的问题:不要将您的鞋号发布到viewshoe.php,而是使用GET;并使用服务器重写规则来重写 URL。

因此,例如,鞋子可能位于example.com/viewshoe.php?id=big-red-shoe。使用以下 .htaccess 重写规则,您将能够通过 example.com/shoes/big-red-shoe 访问鞋子。

RewriteRule ^shoes/([^/]*)/?$ /viewshoe.php?id=$1 [R=301, L]

【讨论】:

  • 您能告诉我实施此类系统的正确方法是什么吗?
  • 首先,重新发明轮子并不是一个好主意。有很多开源系统可以做到这一点。我突然想到的一些事情是:您似乎没有将表示与业务逻辑分开;您的系统的单个入口点会更合适;就像使用某种路由器路由到您的页面控制器一样;当然,按照预期的方式使用 HTTP 会更好。如果您有兴趣,我可以为您指明正确的方向,以便您阅读。
猜你喜欢
  • 2017-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-11
  • 1970-01-01
  • 1970-01-01
  • 2014-06-28
  • 1970-01-01
相关资源
最近更新 更多