如何使用.htaccess清理URL

时间:2016-05-24 03:07:06

标签: php apache .htaccess redirect mod-rewrite

我很沮丧地使用POST寻找干净的网址:

我的.htaccess代码:

.htaccess

第一条规则是完美地隐藏了我的URL的.php扩展名,但第二条规则不起作用。单击产品列表中的产品ID no后,我的产品的URL。我现在正在使用免费主机。的 freehost.16mb.com/product?id=156

我的产品列表链接代码是:

RewriteEngine on
RewriteRule ^([^/\.]+)/?$ $1.php  [L,QSA]
RewriteRule ^/([0-9]+)$ product.php?id=$1

因此,我尝试使用<a href="product.php?id=<?php echo $row['ID']; ?>"> link 1 array </a> 将网址清理为 freehost.16mb.com/product/156

我正在使用上面的.htaccess代码,但它对我不起作用。我需要一些帮助。

2 个答案:

答案 0 :(得分:0)

您的第二条规则未在ID之前为前导/product做出规定,并且您的HTML锚点使用了您要重写的格式 - 这需要进行交换。

将您的锚标记更改为以下内容:

<a href="/<?php echo $row['ID']; ?>

您还需要通过添加QSAL标志以及从规则模式中删除前导斜杠来稍微修正您的规则:

RewriteRule ^([0-9]+)$ product.php?id=$1 [QSA,L]

完成后,/1234将重写为/product.php?id=1234

但是,如果您希望包含/product段,请改用:

<a href="/product/<?php echo $row['ID']; ?>
RewriteRule ^product/([0-9]+)$ product.php?id=$1 [QSA,L]

答案 1 :(得分:0)

只需在你的.htaccess中使用它:

Options +FollowSymLinks
RewriteEngine on
RewriteRule product/id/(.*)/ product?id=$1
RewriteRule product/id/(.*) product?id=$1

这会将您的网址变为:

freehost.16mb.com/product/id/156

要拥有freehost.16mb.com/product/156,只需从RewriteRule中删除id /,所以它将是:

Options +FollowSymLinks
RewriteEngine on
RewriteRule product/(.*)/ product?id=$1
RewriteRule product/(.*) product?id=$1

---- ALTERNATIVE ----

RewriteCond %{QUERY_STRING} (^|&)id=156($|&)
RewriteRule ^freehost\.16mb\.com/product$ /freehost.16mb.com/product/156?&%{QUERY_STRING}