问题描述
我目前在一个 PHP 网站上工作,我对 htaccess 重写规则和条件非常缺乏经验。我的问题是如何才能从链接中只获取第一个目录?
例如,我有一个链接“example.com/page1/page2/?something=something”,我需要输出为 page1,以便我可以将其重定向到 index.PHP?p=page1
还有我该怎么做才能得到“page2”或“?something=something”的输出?所以在这种情况下,我会将它重定向到 index.PHP?p=page1&ap=page2&something=something
我知道理论上我可以使用:
RewriteRule ^page1/page2$ index.PHP?p=page1&ap=page2
但在这种情况下,我无法预测 page1 和 page2 将是什么,所以假设它就像一个变量:
RewriteRule ^{somevariable}/{someothervariable}$ index.PHP?p={somevariable}&ap={someothervariable}
在这种情况下,输出将是“index.PHP?p=page1&ap=page2”。
提前致谢!
解决方法
您确实可以使用 RewriteRule
来解析 URL...
RewriteRule ^(.*?)/(.*)/?$ /index.php?p=$1&ap=$2 [L,QSA]
^ : Match the start of the string
(.+?) : Match any character one or more times; non-greedy
/ : Match a slash
(.+) : Match any character one or more times
/? : Optionally match a slash
$ : Match the end of the string
L : Stops processing rules
QSA : Append the original query string
示例
http://www.somewebsite.com/page1/page2?id=1435
print_r($_GET);
/*
Array
(
[p] => page1
[ap] => page2
[id] => 1435
)
*/