Apache重定向正则表达式:匹配不是某个内容后面的内容

3
什么正则表达式应该表示“除‘index.php’外的所有内容都应指向‘index.php/$1’”?
例如,“http://mysite/moo”应指向“http://index.php/moo”,而“http://index.php/moo”则不应。
我目前正在使用PCRE正则表达式(Apache文档表示此处应使用PCRE),但没有效果:RedirectMatch (?<=index\.php)(\/.+) /index.php/$1
什么是正确的正则表达式?
更新:重点是仅使用mod_alias,省略mod_rewrite。

你所使用的?<=的否定形式是?<! - mario
@mario,RedirectMatch (?<=index\.php)(\/.+) /index.php/$2会永久重定向到/index.php/。你有什么建议吗? - shybovycha
3个回答

3
您可以使用一个不匹配模式(“!”前缀)的RedirectCond。请尝试:
RewriteCond %{REQUEST_URI} !^/index.php
RewriteRule (.*) index.php/$1

或者:

RewriteCond $1 !^/?index.php
RewriteRule (.*) index.php/$1

1
对不起,但我不需要mod_rewrite =) - shybovycha

2
也许:
^/?(?!index\.php)(.+)

即负向先行断言。

似乎它匹配URL,但应该设置什么重定向规则呢?/index.php/$1会导致无限递归的URL =) - shybovycha

0

我只尝试了一个简单的重定向到静态网站(有效):

RedirectMatch   ^(?!/index\.htm$).*$    /index.htm

基于此,以下内容可能对您有所帮助(我自己没有尝试过):

RedirectMatch   ^(?!/index\.php$)(.*)$    /index.php$1

另请参阅:掌握前瞻和后顾


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接