我有一个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/1
是player/1.php
。这当然会打破我试图获取播放器信息的查询。
答案 0 :(得分:1)
您的第一次尝试是正确的,但您需要禁用MultiViews
选项。
Options -MultiViews
RewriteEngine On
RewriteRule ^player/([^/]+)/?$ player.php?playerid=$1 [NC,L,QSA]
MultiViews
使用选项Apache's content negotiation module
在 mod_rewrite
之前运行,并使Apache服务器匹配文件扩展名。因此/file
可以在网址中,但它会投放/file.php
。