.htaccess ModRewrite 带有 2 个参数

.htaccess ModRewrite with 2 parameters

@anubhava 为我之前使用以下代码进行 .htaccess 内部重写的问题提供了一个很好的答案,它适用于我的一个搜索查询。


RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} id=([0-9]+) [NC]
RewriteRule ^file\.php$ /directory/%1? [R=301,L,NC]

RewriteRule ^directory/(\d+)/?$ /directory/file.php?id= [L,QSA,NC]

我想将此作为一个单独的问题,因为我的下一个问题略有不同。我怎样才能使它适应 two 参数?例如,我还希望 http://ipaddress/directory/file.php?id=47?name=value1 重定向到 http://ipaddress/directory/47/value1 name=也可以是字母和数字的任意组合,如value1050等

感谢 @anubhava 之前的回答,也许还有办法添加这个 第二个参数

考虑到您正在以 id=1234&name=value123 样式分隔查询字符串值,因为不允许传递 2 次查询字符串,那么您可以尝试按照以下方法修复您显示的尝试。

RewriteEngine on
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^id=(\d+)&name=(.*)$ [NC]
RewriteRule ^file\.php/?$ /directory/%1/%2? [R=301,L,NC]

RewriteRule ^directory/(\d+)/(.*)/?$ /directory/file.php?id=&name= [L,QSA,NC]


第二个解决方案: 在这里添加 1 个解决方案,请一次使用上面的或使用下面的一个。

RewriteEngine on
RewriteCond %{THE_REQUEST} \s/file\.php\?d=(\d+)&name=(\S+)\s [NC]
RewriteRule ^ /directory/%1/%2? [R=301,L]
RewriteRule ^directory/(\d+)/(.*)/?$ /directory/file.php?id=&name= [NC,L,QSA]