【问题标题】:regex - how to negate multiple words正则表达式 - 如何否定多个单词
【发布时间】:2017-09-23 05:27:28
【问题描述】:

我的网站根目录中有 html 页面,在一个名为“c”的文件夹中有更多页面。

我的 .htaccess 文件中有以下正则表达式,用于从 url 中隐藏子目录“/c”。

RewriteCond %{REQUEST_URI} !^/(a|c|e|f|i|n|s|home|mainpage1|mainpage2| mainpage3|mainpage4|mainpage5|mainpage6|mainpage7|mainpage8|mainpage9|mainpage10|mainpage11|mainpage12|mainpage13|mainpage14|mainpage15)
RewriteRule ^(.*)$ /c/$1 [NC,L]

其中单个字母只是其他文件夹的名称。此正则表达式可防止将“/c”添加到任何主页面,并且仅将其添加到实际位于文件夹“c”中的页面。

但是这使得它排除了所有以字母 a、c、e 等开始的字符串。

我怎样才能让它精确地检查一个字符串; “字符串”而不是“字符串开头?

【问题讨论】:

    标签: regex .htaccess mod-rewrite url-rewriting


    【解决方案1】:
    1. 使用锚点进行精确匹配,而不是开始匹配。
    2. 您可以使用字符类 [acefins] 而不是交替使用单个字符 (a|c|e|f|i|n|s)

    使用这条规则:

    RewriteCond %{REQUEST_URI} !^/(?:[acefins]/.*|home|mainpage1|mainpage2|mainpage3|mainpage4|mainpage5|mainpage6|mainpage7|mainpage8|mainpage9|mainpage10|mainpage11|mainpage12|mainpage13|mainpage14|mainpage15)/?$
    

    【讨论】:

    • 谢谢,但是 mainpage1mainpage15 实际上都是不同的唯一名称,那么 RewriteCond %{REQUEST_URI} !^/(?:[acefins]|home|mainpage1|mainpage2|mainpage3|mainpage4|mainpage5|mainpage6|mainpage7|mainpage8|mainpage9|mainpage10|mainpage11|mainpage12|mainpage13|mainpage14|mainpage15)/?$ 会起作用吗?
    • 也许是因为 [acefins] 是文件夹?刚看到你的评论就试试看
    • 可悲的是它仍然给我一个错误=(整个网站
    • 我已经在我的 Apache 中测试了这个规则,现在没有错误。您一定犯了复制/粘贴错误。确保复制/粘贴中没有隐藏或控制字符
    • 我在回答中再次复制/粘贴了纯文本。直接从我的回答中粘贴。
    猜你喜欢
    • 1970-01-01
    • 2016-09-06
    • 2014-07-06
    • 2017-11-30
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多