Joh*_*ohn 10 regex mod-rewrite
请帮忙,我疯了!
RewriteRule ^([a-z0-9_-]+)?/?search/?$ search.php?id=$1&%{QUERY_STRING} [NC,L]
Run Code Online (Sandbox Code Playgroud)
这是我目前的代码.有时人们会访问mysite.com/search,有时他们会访问mysite.com/boris/search,我会检测到一个空($ _ GET ['id'])检查的用户.
但是我正在创建另一个搜索,mysite.com/products/search,它通向products_search.php
我需要我的原始RewriteRule来匹配任何用户除了"产品"这个词.
我尝试过这么多组合.
RewriteRule ^(!products&[a-z0-9_-]+)?/?search/?$ search.php?id=$1&%{QUERY_STRING} [NC,L]
Run Code Online (Sandbox Code Playgroud)
我对regex/mod_rewrite不是很好,但我上面的东西应该有用吗?我只需要一个AND运算符清楚且不起作用,但我找不到一个!
提前谢谢了.
Gum*_*mbo 10
您有两个选择:使用a RewriteCond来限制已匹配的字符串:
RewriteCond $1 !=products
RewriteRule ^([a-z0-9_-]+)?/?search/?$ search.php?id=$1&%{QUERY_STRING} [NC,L]
Run Code Online (Sandbox Code Playgroud)
或者从Apache 2开始,您也可以使用否定的预见断言:
RewriteRule ^(?!products/)([a-z0-9_-]+)?/?search/?$ search.php?id=$1&%{QUERY_STRING} [NC,L]
Run Code Online (Sandbox Code Playgroud)
除此之外,您还可以使用QSA标志,而不是手动附加QUERY_STRING.请注意,您当前的模式也会允许类似的东西/foobarsearch/,因此它没有分离/.