Apache 用否定条件重写cond

Apache 用否定条件重写cond,apache,.htaccess,mod-rewrite,redirect,rewrite,Apache,.htaccess,Mod Rewrite,Redirect,Rewrite,我正在尝试将所有www.site.com/hello重写为www.site.com/index.php?p=hello 它与以下代码一起工作(在.htaccess中): 但是我想保持旧链接正常工作,这样www.site.com/?p=hello将保持www.site.com/?p=hello 我已经尝试了以下代码,但它不起作用 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(\?p=) RewriteRule ^(

我正在尝试将所有
www.site.com/hello重写为www.site.com/index.php?p=hello
它与以下代码一起工作(在
.htaccess
中):

但是我想保持旧链接正常工作,这样
www.site.com/?p=hello
将保持
www.site.com/?p=hello

我已经尝试了以下代码,但它不起作用

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(\?p=)
RewriteRule ^([^/]*)/?$ /index.php?p=$1
我找到了答案

错误是试图使用
REQUEST\u URI
获取
get
参数。正确的用法应该与
查询字符串一起使用,如下所示:

RewriteCond %{QUERY_STRING} !(p=.*)$ 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)/?$ /index.php?p=$1
RewriteCond %{QUERY_STRING} !(p=.*)$ 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)/?$ /index.php?p=$1