正则表达式将尾部斜线添加到 URL 除非 URL 以文件扩展名结尾

Regex to Add Trailing Slash to URL Unless the URL Ends in a File Extension

我目前正在尝试让一个 WordPress 网站(使用重定向插件)始终向任何 URL 添加尾部斜杠,但前提是 URL 没有结束在斜杠或文件扩展名中(因此图像,.php files/pages 等不受影响)。

例如www.mysite.com/page 变为 www.mysite.com/page/,但 www.mysite.com/page/www.mysite.com/file.php 保持不变。

我能够让前半部分工作(如果它还没有结束,则强制使用尾部斜杠),但我正在努力添加额外的条件。

这是我目前拥有的:

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

目标 URL://

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

根据您的需要,您可以添加 (?!.*\.)(后面没有句点),或 (?!.*\.php$)(后面没有 php 扩展名),或 (?!.*\.(?:php|jpg)$)(后面没有 php 或 jpg 扩展名),ecc.

完整示例:

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

在这些示例中,匹配组不是必需的,因此您可以替换为 [=14=]\/

查看工作演示 here and here

如果在最后一个/之后的部分不能有点那么你可以将它添加到否定字符class.

如果 delimiter 不是 / 那么您不必在模式中转义它。

/([^/.]+)$

Regex demo