正则表达式向URL添加尾部斜杠,除非URL以文件扩展名结尾

问题描述

我目前正在尝试获取WordPress网站(使用重定向插件),以便始终在没有URL的任何URL后面添加斜杠,但前提是该URL既不以斜杠结尾也不是文件扩展名(因此图片,.PHP文件/页面等不受影响。

例如www.mysite.com/page成为www.mysite.com/page/,但是www.mysite.com/page/www.mysite.com/file.PHP则保持不变。

我能够使前半部分正常工作(如果还没有结束,则强制使用斜杠),但是我正努力添加其他条件。

这是我目前拥有的:

源URL:/([^\/]+)$

目标网址:/$1/

不幸的是,不能使用.htaccess等。任何建议将不胜感激。

解决方法

如果最后一个/之后的部分中没有点,则可以将其添加到否定的字符类中。

如果delimiter不是/,那么您就不必在模式中对其进行转义。

/([^/.]+)$

Regex demo

,

根据需要,可以添加(?!.*\.)(不带句点)或(?!.*\.php$)(不带php扩展名)或(?!.*\.(?:php|jpg)$)(不带空格) php或jpg扩展名)等。

完整示例:

\/(?!.*\.)[^\/]+$
\/(?!.*\.php$)[^\/]+$
\/(?!.*\.(?:php|jpg)$)[^\/]+$

在这些示例中,不需要匹配的组,因此您可以替换为$0\/

请参见工作演示herehere