如何使用.htaccess为多个参数创建干净的URL

时间:2014-12-29 13:33:26

标签: .htaccess url mod-rewrite

这是重写干净网址的.htaccess代码。

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+download\.php\?id=([^\s&]+) [NC]
RewriteRule ^ download/%1? [R=301,L]
RewriteRule ^download/([^/]+)/?$ download.php?id=$1 [L,QSA]

此代码适用于url中的单个参数。例如,它会将www.mysitename.com/download.php?id=123重写为www.mysitename.com/download/123

但是当我尝试在url中传递多个参数时,我得到的只是错误。搜索了各种资源和相关问题,但没有得到适当的解决方案。

我需要一个类似www.mysitename.com/download/123/file-name的网址,而不是www.mysitename.com/download.php?id=123&name=file-name

我想我可以使用像RewriteRule ^(.*)/(.*)$ download.php?id=$1&name=$2之类的东西。但在实施过程中我遇到了404错误。如何更改我的代码以传递多个网址。提前谢谢。

1 个答案:

答案 0 :(得分:2)

您只需在规则中添加参数

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+download\.php\?id=([0-9]+)&name=([^\s&]+)\s [NC]
RewriteRule ^ download/%1/%2? [R=301,L]
RewriteRule ^download/([0-9]+)/([^/]+)/?$ download.php?id=$1&name=$2 [L]