我正在用PHP进行一些URL重写,需要找到末尾有斜线的URL,然后执行301重定向。我以为会有一个简单的PHP函数来查找最后一个字符串,但我找不到任何东西。第一直觉让我觉得我需要使用regex,但我不是100%。
下面是一个例子:
http://domainx.com/characters/我想找到一个尾随斜杠并将其转换为http://domainx.com/characters
那么,什么函数可以帮助我检查最后一个字符是否是"/"?
- 有10多种方法可以做到这一点!
- 谢谢你们的回复!不太确定该选哪一个。
- if (s($str)->endsWith('/'))header('Location: '.s($str)->replaceLast('/')),在这个独立的库中找到。无论如何,对于重定向,在Web服务器(例如使用mod_rewrite的Apache)中执行此操作可能更容易。
安全移除最后一个/的一个很好的解决方案是使用
1
| $string = rtrim($string, '/'); |
当有一个或多个字符串时,rtrim()删除字符串右侧的所有/。
您还可以在URL末尾安全地添加一个单独的/:
1
| $string = rtrim($string, '/').'/'; |
您可以使用substr:
这将返回单字节字符串中的最后一个字节/字符。另请参见多字节字符串变量mb_substr。
但是,如果您只想删除任何尾部斜杠,那么rtrim可能是最好的解决方案。
而且,由于您使用的是URL,您还可以查看parse_url来解析URL,因为尾部斜杠不需要是URL路径的一部分。
- 投反对票的原因是什么?
- +你得到了我的赞成票-你实际上回答了标题中的问题。
$string[strlen($string)-1]给了你最后一个字符。
但是如果你想去掉尾随斜杠,你可以做$string = rtrim($string, '/');。如果没有尾随斜线,$string将保持不变。
您可以使用basename()。
这将使http://domainx.com/characters/和http://domainx.com/characters返回characters。
你可以这样做:
1 2
| $page = $_SERVER['REQUEST_URI'];
$module = basename($page); |
然后,您可以直接在条件逻辑中使用$module,而不必进行任何重定向。
如果要收集最后一个/修剪的URL,则可以执行以下操作:
如果要将项目基URL存储在配置文件中:
1
| BASE_URL = 'http://example.com' |
那么你可以这样做:
1 2 3
| $page = $_SERVER['REQUEST_URI'];
$module = basename($page);
$trimmedUrl = BASE_URL .'/'.$module; |
如果php>7.1
会给你最后一个角色
http://sandbox.onlinephpfunctions.com/code/ff439889f14906749e4eb6328796c354c60f269b
你可以在主题结束时用preg_replace()来表示/。
1 2
| $url = 'http://domainx.com/characters/';
$url = preg_replace('/(?:\/)$/', '', $url); |