微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.htaccess 带 2 个参数的 ModRewrite

如何解决.htaccess 带 2 个参数的 ModRewrite

@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=$1 [L,QSA,NC]

我想把它作为一个单独的问题,因为我的下一个问题略有不同。我怎样才能使它适应两个参数?例如,我还希望 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=$1&name=$2 [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=$1&name=$2 [NC,QSA]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。