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

时间:2014-09-30 17:32:12

标签: 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
www.website.com/profile.php?user=user2 -> www.website.com/user2

两者都使用相同的规则,但具有不同的位置。对于索引页面,只有2个可能的参数page1page2,但个人资料页面的参数可以是任何参数。

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

我的想法是在用户规则之上添加一条规则(我不确定如何),以检查该网址是否包含page1page2

1 个答案:

答案 0 :(得分:0)

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

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]