.htaccess重写使用和不使用$ _GET变量

时间:2015-02-14 14:23:49

标签: .htaccess mod-rewrite

我有一个player.php页面,如果没有定义playerid GET变量,那么它将获得全局变量中定义的当前用户。这很有效。只是当我尝试实施重写时,我遇到了问题。

首先我有这个:

RewriteEngine On

RewriteRule ^player/([^/]+) player.php?playerid=$1 [NC,L]

^如果playerid变量已设置,则工作正常,但如果不是,我只得到404

接下来我尝试修复

RewriteEngine On

RewriteRule ^player player.php [NC]
RewriteRule ^player/([^/]+) player.php?playerid=$1 [NC,L]

^现在他们只是加载当前用户的个人资料而不管playerid

所以我完全改变了方法

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC]
RewriteRule ^player/([^/]+) player.php?playerid=$1 [NC,L]

^这适用于不设置playerid,但如果设置了它,则会在末尾添加.php。所以它认为player/1player/1.php。这当然会打破我试图获取播放器信息的查询。

1 个答案:

答案 0 :(得分:1)

您的第一次尝试是正确的,但您需要禁用MultiViews选项。

Options -MultiViews
RewriteEngine On

RewriteRule ^player/([^/]+)/?$ player.php?playerid=$1 [NC,L,QSA]

MultiViews使用选项Apache's content negotiation modulemod_rewrite之前运行,并使Apache服务器匹配文件扩展名。因此/file可以在网址中,但它会投放/file.php