.htaccess Url重写规则导致404错误
我有这个网址.htaccess Url重写规则导致404错误,.htaccess,mod-rewrite,url-rewriting,clean-urls,.htaccess,Mod Rewrite,Url Rewriting,Clean Urls,我有这个网址 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\.
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错误,但浏览器上显示的链接是正确的。首先:
当我将鼠标指针滚动到球项目上时,浏览器上显示的链接是第一个,但我希望它显示第二个
重写引擎不会更改站点的实际内容。它仅更改浏览器发送到服务器的请求URI。让链接看起来像http://www.mysite.com/product/Ball-25672/
并且完全超出了mod_重写的能力
第二:
当我点击url时,我得到404错误,但是浏览器上显示的链接是正确的
您正在将浏览器重定向到外观更好的URL:http://www.mysite.com/product/Ball-25672/
。然后浏览器会看到这个新的URL,并从服务器请求它。因此,服务器看到/product/Ball-25672/
并尝试提供它,但它不存在,因此您得到404。这里需要两套规则,一套从外部将浏览器重定向到外观更好的URL,另一套从内部将外观更好的URL重写回内容实际所在的位置:
“当我将鼠标指针滚动到球项目上时,它在浏览器上显示的链接是第一个,但我希望它显示第二个”–然后您必须将第二个链接写入HTML…mod_rewrite只能重定向您的链接,它无法更改您页面的内容。@CBroe:product.php文件将如何处理此链接?在您内部重写后会这样做……请查看mod_rewrite是如何工作的,您似乎不知道。@CBroe我读了很多关于它的书,并尝试了许多示例和工具,但大多数都可能已经过时,我想我在问一些很简单的问题,但我没有得到答案。
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]