我想将这些URL转换为SEO友好URL:
index.php?t=1&s=1&offset=50&hits=50 ---> index-t-1-s-1-offset-50-hits-50.html
index.php?t=1&s=1 ---> index-t-1-s-1.html
index.php?t=1&s=&offset=50&hits=50 ---> index-t-1-s-1-offset-50-hits-50.html
index.php?t=1 ---> index-t-1.html
我已经写过:
$filename = substr(basename($base_href),0,'-4');
$str = preg_replace('/href=\'\?t=(\d+)&s=(\d+)\'/i', 'href=\''.$filename.'-t-$1-s-$2.html\'', $str);
但是我需要一个通用的表达。
我注意到您替换了.php?
(我认为这是可选的?
)一词,并将所有simbol替换为-
,并在末尾附加.html
。因此,您只需要这样做:
$filename = "index.php?t=1&s=1&offset=50&hits=50";
$result = preg_replace('/(?:\.php\??|\W)/', '-', $filename) . '.html';
//~> index-t-1-s-1-offset-50-hits-50.html
它将这样做:
.php?
或.php
替换为-
;\W
(不要与\w
混淆)替换为-
;.html
阅读有关正则表达式here的更多信息
[对于解决方案,我首先将URL除以?
,然后将所有&
和=
替换为-
,然后将字符串连接回去(在处理过程中删除了.php
在另一部分中URL)