【问题标题】:Url rewrite rule leads to 404 errorurl重写规则导致404错误
【发布时间】:2013-11-24 15:22:11
【问题描述】:

我有这个网址

http://www.mysite.com/product.php?name=Ball&id=25672

我想让它看起来像这样

http://www.mysite.com/product/Ball-25672/

我使用这个 .htaccess 文件

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{QUERY_STRING} ^name=(.*)&id=(.*)
RewriteRule ^product\.php$ /product/%1-%2/? [L,R=301]

我有两个问题:

1) 当我在球项目上滚动鼠标指针时,它显示在浏览器上的链接是第一个,但我希望它显示第二个

2)当我点击 url 时出现 404 错误,但浏览器上显示的链接是正确的。

【问题讨论】:

  • “当我在球项目上滚动鼠标指针时,它在浏览器上显示的链接是第一个,但我希望它显示第二个” – 然后你将不得不将第二个写入您的 HTML ...
  • mod_rewrite 只能重定向你的链接,它不能改变你的页面内容。
  • @CBroe:product.php文件将如何处理这个链接?
  • 重写后内部 ...请去看看mod_rewrite是如何工作的,你似乎不知道。
  • @CBroe 我已经阅读了很多关于它的内容并尝试了许多示例和工具,但其中大多数可能已经过时了,我认为我提出的问题非常简单,但我没有得到答案。

标签: .htaccess mod-rewrite url-rewriting clean-urls


【解决方案1】:

第一:

当我在球项目上滚动鼠标指针时,它显示在浏览器上的链接是第一个,但我希望它显示第二个

重写引擎不会改变您网站的实际内容。它只更改浏览器发送到服务器的请求 URI。让您的链接看起来像http://www.mysite.com/product/Ball-25672/ 完全取决于您,这完全超出了 mod_rewrite 的能力。

第二:

当我点击 url 时出现 404 错误,但浏览器上显示的链接是正确的。

您正在将浏览器重定向到更好看的 URL:http://www.mysite.com/product/Ball-25672/。然后浏览器会看到这个新的 URL,并从服务器请求它。因此,服务器看到/product/Ball-25672/ 并尝试为其提供服务,但它不存在,因此您得到一个 404。您需要在这里设置 2 组规则,一个从外部将浏览器重定向到看起来更好的 URL,然后一个在内部将更好看的 URL 重写回内容实际所在的位置

Options +FollowSymLinks -Multiviews
RewriteEngine on

RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /+product\.php\?name=([^&]+)&id=([0-9]+)
RewriteRule ^ /product/%2-%3/? [L,R=301]

RewriteRule ^product/(.+)-([0-9]+)/?$ /product.php?name=$1&id=$2 [L]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    相关资源
    最近更新 更多