【问题标题】:PHP - URL rewrite not working in htaccessPHP - URL 重写在 htaccess 中不起作用
【发布时间】:2014-06-06 10:16:40
【问题描述】:

我创建了动态产品,例如迷你购物车 我的网址是这样的

<a class="button_view" href="view.php?procode=<?php echo $obj->product_code; ?>">View</a>

在浏览器中我看到了这个链接

http://localhost/sd/view.php?procode=PD1001

我想重写 url 并使 seo 友好我的 htacess 是

<IfModule mod_rewrite.c>

Options +Indexes
Options         +FollowSymLinks
RewriteEngine   On
RewriteBase     /
RewriteCond %{QUERY_STRING} hack
RewriteCond %{HTTP_COOKIE} !go
RewriteRule . - [F]
RewriteRule ^view.php?procode=([a-zA-Z0-9]+)$ view/$1/$2
</IfModule>

我想要这样的东西

http://localhost/sd/view/sunglasses/
http://localhost/sd/view/iphone6/
http://localhost/sd/view/androidphonefx1/

【问题讨论】:

  • 为什么不先把你的 HTML 改成&lt;a class="button_view" href="/sd/view/&lt;?php echo $obj-&gt;product_code.'/'.$obj-&gt;product_name; ?&gt;"&gt;View&lt;/a&gt;
  • 感谢回复@anubhava 现在下一步我在点击此链接后发现 404 错误localhost/sd/view/PD1001/AndroidPhoneFX1
  • 下一步看我的回答。

标签: php .htaccess url-rewriting seo


【解决方案1】:

好的,这听起来很熟悉。

实际上你必须让 mod_rewrite 朝着另一个方向工作。

您实际上希望收到这样的链接:

http://yourhost/sd/view/sunglasses/{code}
http://yourhost/sd/view/iphone6/{code}

并且您想在内部将它们重写为如下内容:

http://yourhost/sd/view.php?procode={code}

所以在这种情况下,您的 RewriteRule 将是:

RewriteRule ^view/sd/[a-zA-Z0-9]+/([a-zA-Z0-9]+)$ view?procode=$1

您只需要从 url 中获取代码以传递给重写的 procode 参数。

您也可以同时获取项目名称或仅获取项目名称,并尝试仅通过系统中的名称来匹配项目(这会更难并且可能相当棘手)。

【讨论】:

【解决方案2】:

将您的 href 更改为:

<a href="/sd/view/<?php echo $obj->product_code.'/'.$obj->product_name; ?>">View</a>

然后在您的 `/sd/.htaccess 中使用这些规则:

<IfModule mod_rewrite.c>
Options +Indexes
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /sd/

RewriteCond %{QUERY_STRING} hack
RewriteCond %{HTTP_COOKIE} !go
RewriteRule . - [F]

RewriteRule ^view/([\w-]+) view.php?procode=$1 [L,QSA,NC]
</IfModule>

【讨论】:

  • 我得到:找不到对象!当 PD1002 是产品 ID 时,此链接上的 404 错误 localhost/sd/view/PD1002/televisions
  • 但是有问题你写的预期 URI 是:/sd/view/sunglasses/ 没有单独的 prodId 和 prodName。 /sd/view/PD1002/televisions 的内部 URI 是什么?
  • 找不到对象!在此服务器上找不到请求的 URL。当前网址是:localhost/sd/view/PD1002/televisions
  • 我在之前的评论中问过你一个问题。这个 .htaccess 的位置是什么?
  • .htaccess 在这个文件夹中的文件夹中 index.php cart.php .htaccess C:\xampp\htdocs\sd\
猜你喜欢
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-04
  • 2015-02-03
  • 2014-08-08
相关资源
最近更新 更多