.htaccess-rewrite:相同的规则,不同的位置


.htaccess rewrite: Same rule, different location

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

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

两者使用相同的规则,但位置不同。对于索引页,只有两个可能的参数,page1page2,但配置文件页的参数可以是任何值。

如果不做www.website.com/page/page1www.website.com/user/user1之类的事情,我怎么能实现这些重写规则呢。我需要上面显示的那些确切的规则。

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

由于您只有两个可能的页面,因此可以使用以下内容:

RewriteEngine On
RewriteRule ^(page1|page2)$ /index.php?page=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ /profile.php?user=$1 [L]

如果您也需要从外部重定向,请添加以下内容(RewriteEngine On正下方):

RewriteCond %{THE_REQUEST} ' /+index'.php'?page=(page1|page2)
RewriteRule ^ /%1? [L,R]
RewriteCond %{THE_REQUEST} ' /+profile'.php'?user=([^&' ]+)
RewriteRule ^ /%1? [L,R]