regex - mod_rewrite 将 '_' 替换为 '-'

标签 regex mod-rewrite replace

我几乎已经有了 mod_rewrite 规则,但我已经屈服了:)

我需要重写

country/[countryname].php 

country/[countryname]/

但是,[countryname] 可能有这样的下划线:'south_africa.php',如果有,我想用连字符替换它:'south-africa/'

我还想匹配该国家/地区后面是否有数字:“france03.php”到“france/”

这是我的规则,它几乎就在那里,但即使下划线后面没有第二部分,它仍然添加一个连字符。

RewriteRule ^country/(.*)_(.*?)[0-9]*\.php$ country/$1-$2 [R=301,L]

因此目前“country/south_.php”变为“country/south-/”

有人可以帮我找到拼图中缺失的那一 block 吗?谢谢。

最佳答案

试试这个:

RewriteRule ^country/([^_]*)_([^_]*?)\d*\.php$ country/$1-$2 [R=301,L]

此规则将匹配带有单下划线的网址 - 您需要使用不同的规则来获取更多下划线或没有下划线。

如果您想确保 $2 仅包含字母且不为空,请将 ([^_]*?) 更改为 ([a -zA-Z]+).

关于regex - mod_rewrite 将 '_' 替换为 '-',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4144121/

相关文章:

regex - 使用 htaccess 从 url 中删除 .php

apache - 在 Apache2 中使用 mod_jk 为 URL 别名

apache - 如何在 Apache 中删除 cookie

javascript - 字符串替换不会替换字符的第二个实例

regex - 正则表达式选择逗号但不在括号之间

Java 正则表达式 : Normalize all escaped or non-escaped newlines - why does this fail?

regex - Perl - 如何匹配不完全相同的字符串?

javascript - PHP - file_get_contents 使用正则表达式获取 JSON,但无法解码 JSON(获取 JSON_ERROR_SYNTAX)

php - 读写配置文件

javascript - Node js中的字符串正则表达式替换