1

我正在尝试在 PHP 中编写一个正则表达式,它将在所有指定的位置或除指定位置之外的每个位置加载内容。

#load content everywhere EXCEPT locations expressed
<?php if (preg_match('/\/(contact\/|news\/|index\.html)/', $_SERVER['REQUEST_URI']) === 0): ?>
<div class="greeting">Bonjour</div>
<?php endif; ?>

#load content on locations expressed
<?php if (preg_match('/\/(contact\/|news\/|index\.html)/', $_SERVER['REQUEST_URI']) === 1): ?>
<div class="greeting">Konichiwa</div>
<?php endif; ?>

我遇到的问题是我无法让我的网站的根目录/index.html(特别是http://example.com/index.html/contact/ ,没有其他地方)与or中任何页面的通配符一起工作/news/

再次总结一下:( /contact/*任何联系页面),/news/*(/news/ 中的任何页面),/index.html(网站根目录)

我尝试了几种在 index.html 之前添加斜线的不同方法,但它要么不起作用,要么返回 PHP 错误。

4

1 回答 1

1

确保使用锚^(行开始)确保匹配来自根的 URI:

if (preg_match('#^/(contact/|news/|index\.html|$)#', $_SERVER['REQUEST_URI']))

我还将正则表达式分隔符更改为#,这样您就可以避免/在您的正则表达式中转义。

于 2013-08-03T08:32:24.990 回答