问题描述
@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]