【问题标题】:How to create clean url using .htaccess for multiple parameters如何使用 .htaccess 为多个参数创建干净的 url
【发布时间】:2025-12-31 16:50:01
【问题描述】:

这是我重写干净 url 的 .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 错误。如何更改我的代码以传递多个 url。提前致谢。

【问题讨论】:

    标签: .htaccess url mod-rewrite


    【解决方案1】:

    您只需要在规则中添加一个参数

    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]
    

    【讨论】:

    • 不客气。不要忘记验证我的答案,以便将您的问题标记为已解决