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

php – 处理.htaccess重定向与不同的参数?

我想将不进入目录的URL重定向一个脚本(例如script1.PHP),以及具有另一个脚本(script2.PHP)类别的URL.基本上我想做这样的事情:
http://www.test.com/user1 – > http://www.test.com/script1.php?username=user1其中script1.PHP获取用户名并为该用户显示适当的页面.我有这个部分使用此代码

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$script1.PHP?username=$1 [L,QSA]

现在的问题是我还希望有描述性的产品网址,以便例如http://www.test.com/clothes/jackets/cool-red-jacket-25重定向http://www.test.com/items.php?category=clothes&subcategory=jackets&id=25.我有一些代码也适用于此:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?([a-zA-Z-]+)/([a-zA-Z-]+)/.*-A([0-9-.]+)\.PHP$
script2.PHP?category=$1&subcategory=$2&id=$3 [L]

我遇到的问题是组合这两种类型的重定向.第一个重定向始终重定向到自己的页面,第二个重定向永远不会到达.是否有可能将这两种方式结合起来?基本上我需要像htaccess这样的东西,如果可能的话

if(!urlHasDirectories) {
    redirect to script1.PHP?username=$username;
} else {
    redirect to script2.PHP?category=$category&subcategory=subcategory&id=$id;
}

解决方法:

让我们来看看基本的正则表达式,我们将使用Regex101.的.是任何字符,*是前一个字符/分组的量词零次或多次.所以你的第一个正则表达式,RewriteRule ^(.*)$script1.PHP?username = $1 [L,QSA]表示重写任何以任何东西开头的东西,并以scripts1.PHP结尾.那不是你想要的.

演示:https://regex101.com/r/hK0xY3/1

使用正则表达式最好尽可能具体.

我会为用户制定规则:

RewriteRule ^(user\d+)$script1.PHP?username=$1 [L,QSA]

演示:https://regex101.com/r/hK0xY3/4

这是另一个量词,意思是一个或多个,所以如果不需要数字,你可以将其改为*.

你说你想要一个正则表达式来查找路径中是否有/.我认为最好告诉正则表达式要看什么,但这是可能的:

^.+?\/

演示:https://regex101.com/r/hK0xY3/3

使用这种方法,虽然任何目录请求将被重定向

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

相关推荐