我正在编写一个mod_rewrite规则,并且想要一只手让它做我想做的事。
基本上我希望以下情况有效:
request | Redirect to
---------------------
cheese | /?page=cheese
abc123 | /?page=abc123
abc/def | /?page=abc/def
a/b/c/d | /?page=a/b/c/d
(任何字母数字加上。 - /和_重定向)
有两个特例:
request | Redirect to
------------------------
admin | don't redirect
media | don't redirect
使用这两个我不希望任何子目录等重定向。
我到目前为止:
RewriteRule ^([A-Za-z0-9-_]+)/$ /index.php?page=$1 [L]
但这只能满足前两项测试。
有什么想法吗?
答案 0 :(得分:2)
我会创建一个单独的早期规则(正如Kobi也建议的那样)并使用RewriteRule dash directive
来阻止替换。
破折号表示没有替代品 应该执行(现有的路径 通过未触动过)。这是 当一面旗帜(见下文)需要时使用 在不改变路径的情况下应用。
^index.php - [L]
^(admin|media) - [L]
^([A-Za-z0-9-_/\.]+)$ /?page=$1 [L]
(我现在无法测试这个,所以你可能需要稍微编辑一下 - 对不起......但想法应该清楚了)
在Apache 2.2上测试
答案 1 :(得分:1)
如果您的版本支持它,您可以使用否定前瞻:
^(?!(?:admin|media)$)([A-Za-z0-9-_]+)/$
现在,我不是系统管理员,但你可能有一个早先的规则来匹配admin
和media
,这可能是一个更容易的想法。