mod_rewrite排除多个单词

时间:2015-08-24 13:11:42

标签: regex .htaccess mod-rewrite

我将通过htaccess和mod_rewrite实现“漂亮重写”重定向解决方案。我想要实现的目标如下:

example.com/test123 --> example.com/page.php?c=test123

使用单个RewriteRule

即可轻松完成
RewriteRule ^(.*) page.php?c=$1 [L,NC]

但我想排除一些网址:

  • /(我有一个特定的index.php,我不想重写)
  • css/(.*)
  • images/(.*)
  • CMS/(.*)
  • js/(.*)
  • contact/(.*)
  • prijslijst/(.*)
  • werk/(.*)

我尝试了一些正则表达式,但到目前为止无济于事。我想帮助确保列出的目录不会被重写,但任何其他关键字都会被重写。

我尝试过的一些事情:

以下摘录取消任何重写:

第一个:

RewriteCond %{QUERY_STRING} "^!prijslijst/{0,1}(.*)"
RewriteCond %{QUERY_STRING} "^!werk/{0,1}(.*)"
RewriteCond %{QUERY_STRING} "^!js/{0,1}(.*)"
RewriteCond %{QUERY_STRING} "^!css/{0,1}(.*)"
RewriteCond %{QUERY_STRING} "^!CMS/{0,1}(.*)"
RewriteCond %{QUERY_STRING} "^!images/{0,1}(.*)"
RewriteCond %{QUERY_STRING} "^!contact/{0,1}(.*)"
RewriteRule ^(.*) page.php?c=$1 [L,NC]

第二个:

RewriteCond %{QUERY_STRING} "^!(prijslijst|werk|js|css|CMS|images|contact)/{0,1}(.*)"
RewriteRule ^(.*) page.php?c=$1 [L,NC]

第三个:

RewriteRule ^!(prijslijst|werk|js|css|CMS|images|contact)/{0,1}(.*) page.php?c=$1 [L,NC]

稍微调整一下,导致一切被重写,甚至是我想要排除的内容:

RewriteCond %{QUERY_STRING} "!prijslijst/{0,1}(.*)"
RewriteCond %{QUERY_STRING} "!werk/{0,1}(.*)"
RewriteCond %{QUERY_STRING} "!js/{0,1}(.*)"
RewriteCond %{QUERY_STRING} "!css/{0,1}(.*)"
RewriteCond %{QUERY_STRING} "!CMS/{0,1}(.*)"
RewriteCond %{QUERY_STRING} "!images/{0,1}(.*)"
RewriteCond %{QUERY_STRING} "!contact/{0,1}(.*)"
RewriteRule ^(.*) page.php?c=$1 [L,NC]

^已从RewriteCond

的每个第二个参数的开头删除

修改

我已经提交了自己的答案来记录最终解决方案。 @ndn的答案影响很大,它给了我一个正确的方向。非常感谢!

1 个答案:

答案 0 :(得分:3)

RewriteRule ^(?!/$|css/|images/|CMS/|js/|contact/|prijslijst/|werk/)(.*) page.php?c=$1 [L,NC]

基本上,我刚刚接受了原始重写,并为您想要跳过的事项列表添加了负面预测(?!/$|css/|images/|CMS/|js/|contact/|prijslijst/|werk/)