Php .htaccess重写:相同的规则,不同的位置

Php .htaccess重写:相同的规则,不同的位置,php,apache,.htaccess,mod-rewrite,url-rewriting,Php,Apache,.htaccess,Mod Rewrite,Url Rewriting,下面是我想为索引页使用的一些重写规则的列表: www.website.com/index.php?page=page1 -> www.website.com/page1 www.website.com/index.php?page=page2 -> www.website.com/page2 但我也有一个个人资料页面,我希望在其中遵守以下规则: www.website.com/profile.php?user=user1 -> www.website.com/user1 ww

下面是我想为索引页使用的一些重写规则的列表:

www.website.com/index.php?page=page1 -> www.website.com/page1
www.website.com/index.php?page=page2 -> www.website.com/page2
但我也有一个个人资料页面,我希望在其中遵守以下规则:

www.website.com/profile.php?user=user1 -> www.website.com/user1
www.website.com/profile.php?user=user2 -> www.website.com/user2
两者使用相同的规则,但位置不同。对于索引页面,只有两个可能的参数,
page1
page2
,但是配置文件页面的参数可以是任何参数

如果不执行类似于
www.website.com/page/page1
www.website.com/user/user1
的操作,如何实现这些重写规则。我需要如上所示的确切规则


我的想法是在用户规则上方添加一条规则(我不确定如何添加),以检查URL是否没有
page1
page2

,因为您只有两个可能的页面,所以可以这样做:

RewriteEngine On

RewriteRule ^(page1|page2)$ /index.php?page=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ /profile.php?user=$1 [L]
如果您还需要从外部重定向,请添加以下内容(在上重写引擎的右下方):


您应该发布您的实际重写规则,以便我们对其进行评论。添加
RewriteCond%{REQUEST_FILENAME}的原因是什么-f
重写cond%{REQUEST_FILENAME}-d
?我需要在每个新规则之前添加它吗?@user3871006您不需要在每个规则之前添加它。原因是我们正在匹配regex
^([^/]+)$
,它匹配所有不带斜杠的内容。这包括“profile.php”、“index.php”或任何图像、脚本、样式等。因此,我们必须设置一些条件,仅当请求的文件不存在时才应用规则,如果存在,则不应用规则(如
profile.php
)。
RewriteCond %{THE_REQUEST} \ /+index\.php\?page=(page1|page2)
RewriteRule ^ /%1? [L,R]

RewriteCond %{THE_REQUEST} \ /+profile\.php\?user=([^&\ ]+)
RewriteRule ^ /%1? [L,R]