我将通过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的答案影响很大,它给了我一个正确的方向。非常感谢!
答案 0 :(得分:3)
RewriteRule ^(?!/$|css/|images/|CMS/|js/|contact/|prijslijst/|werk/)(.*) page.php?c=$1 [L,NC]
基本上,我刚刚接受了原始重写,并为您想要跳过的事项列表添加了负面预测(?!/$|css/|images/|CMS/|js/|contact/|prijslijst/|werk/)
。