我有这个网址
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)当我点击网址时,我收到404错误,但浏览器上显示的链接是正确的。
答案 0 :(得分:1)
首先:
当我将鼠标指针滚动到球项上时,它在浏览器上显示的链接是第一个,但我希望它显示第二个
重写引擎不会更改您网站的实际内容。它仅将浏览器发送的请求URI更改为服务器。由你决定使你的链接看起来像http://www.mysite.com/product/Ball-25672/
并且完全超出了mod_rewrite的能力。
第二
当我点击网址时,我收到404错误,但浏览器上显示的链接是正确的。
您正在将浏览器重定向到看起来更漂亮的网址:http://www.mysite.com/product/Ball-25672/
。然后,浏览器会看到此新URL 并从服务器请求它。那么服务器看到/product/Ball-25672/
并尝试提供它,它就不存在了,因此你得到了404.你需要这里有两套规则,一个在外部将浏览器重定向到看起来更漂亮的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]