Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess重写以使用和不使用$\u GET变量_.htaccess_Mod Rewrite - Fatal编程技术网

.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]
让它重新运行起来。我不确定之前发生了什么,但感谢您的帮助。您确实让我走上了正确的道路