htaccess不会重写网址

时间:2012-08-09 23:15:27

标签: .htaccess mod-rewrite url-rewriting

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^product/([0-9]+)/([0-9]+)/([0-9]+)/([0-9]+)/([a-zA-Z]+)/$ product.php?id=$1&srl=$2&item=$3&page=$4&title=$5#titleProduct

当我点击f5按钮进行刷新时,URL仍然存在并且没有重新写入。我尝试使用“新”重写链接访问,但它无法正常工作。

1 个答案:

答案 0 :(得分:2)

  哇,这意味着我需要为“新”重写更新每个文件?所有文件都包含具有“旧”链接的不同超链接。我想如果我写一个.htaccess文件,所有的url都会自动重写。

您正在考虑浏览器重定向,更改地址栏,重写需要更好看的URL,并在内部将URI重写为服务器可以理解的内容。请参阅this answer for a better explanation of this process的上半部分。

因此,如果浏览器实际请求product.php文件,那么您可以执行浏览器重定向,然后重定向到伪造的漂亮URL。然后,浏览器将重新发送一个新请求,查看外观漂亮的URL,然后服务器获取该内容,将内部重写返回到php文件(您拥有的规则)。

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /product\.php\?id=([^&]+)&srl=([^&]+)&item=([^&]+)&page=([^&]+)&title=([^&\ ]+)
RewriteRule ^product.php$ /product/%1/%2/%3/%4/%5/ [L,R=301]

这将采用/product.php\?id=123&srl=abc&item=qwerty&page=blah&title=something URI,并将浏览器的301重定向到更好看的网址。那么你的规则应该在内部重写它。

无论如何,你真的应该将你提供的链接更改为更好的URL,依靠mod_rewrite来完成工作的两端真的效率低下。