.htaccess重写以使用和不使用$\u GET变量
我有一个.htaccess重写以使用和不使用$\u GET变量,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我有一个player.php页面,如果没有定义playeridGET变量,那么它将获得全局变量中定义的当前用户的。这是有效的。当我试图实现重写时,我遇到了问题 首先我有一个: RewriteEngine On RewriteRule ^player/([^/]+) player.php?playerid=$1 [NC,L] ^如果设置了playerid变量,效果很好,但是如果没有设置,我只得到了404 下一步,我试图解决这个问题 RewriteEngine On RewriteRule ^
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起作用,但是如果设置了playerid,它会在末尾附加.php。所以它认为
player/1
就是player/1.php
。这当然会打断我试图运行以获取玩家信息的查询。您的第一次尝试是正确的,但您需要禁用多视图
选项
Options -MultiViews
RewriteEngine On
RewriteRule ^player/([^/]+)/?$ player.php?playerid=$1 [NC,L,QSA]
选项
MultiViews
由Apache的内容协商模块使用,该模块在mod_rewrite
之前运行,并使Apache服务器匹配文件扩展名。所以/file
可以在URL中,但它将提供/file.php
我不想这么说,但它在12小时前工作,但现在不工作很难理解在12小时内您的服务器上可能发生了什么。对我来说,这确实是一个经过测试且行之有效的解决方案。我已成功地使用RewriteRule^player/?(.*)$player.php?playerid=$1[NC,QSA]
让它重新运行起来。我不确定之前发生了什么,但感谢您的帮助。您确实让我走上了正确的道路