.htaccess 重写以使用和不使用 $_GET 变量
.htaccess rewrite to work with and without $_GET variable
我有一个 player.php
页面,如果没有定义 playerid
GET 变量,那么它将获取当前用户在全局变量中定义的。这是工作。就在我尝试实现重写时遇到了问题。
首先我有这个:
RewriteEngine On
RewriteRule ^player/([^/]+) player.php?playerid= [NC,L]
^ 如果设置了 playerid
变量,工作正常,但如果没有设置,我就得到 404
接下来我试图解决这个问题
RewriteEngine On
RewriteRule ^player player.php [NC]
RewriteRule ^player/([^/]+) player.php?playerid= [NC,L]
^ 所以现在他们都只加载当前用户的个人资料,而不管 playerid
所以我完全改变了方法
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ .php [NC]
RewriteRule ^player/([^/]+) player.php?playerid= [NC,L]
^ 这适用于不设置 playerid
,但如果设置了它,它会在末尾附加 .php。所以它认为 player/1
是 player/1.php
。这当然打破了我试图 运行 获取玩家信息的查询。
您的第一次尝试是正确的,但您需要禁用 MultiViews
选项。
Options -MultiViews
RewriteEngine On
RewriteRule ^player/([^/]+)/?$ player.php?playerid= [NC,L,QSA]
选项 MultiViews
由 Apache's content negotiation module
使用,它在 之前 mod_rewrite
运行并使 Apache 服务器匹配文件的扩展名。所以 /file
可以在 URL 中,但它会服务于 /file.php
.
我有一个 player.php
页面,如果没有定义 playerid
GET 变量,那么它将获取当前用户在全局变量中定义的。这是工作。就在我尝试实现重写时遇到了问题。
首先我有这个:
RewriteEngine On
RewriteRule ^player/([^/]+) player.php?playerid= [NC,L]
^ 如果设置了 playerid
变量,工作正常,但如果没有设置,我就得到 404
接下来我试图解决这个问题
RewriteEngine On
RewriteRule ^player player.php [NC]
RewriteRule ^player/([^/]+) player.php?playerid= [NC,L]
^ 所以现在他们都只加载当前用户的个人资料,而不管 playerid
所以我完全改变了方法
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ .php [NC]
RewriteRule ^player/([^/]+) player.php?playerid= [NC,L]
^ 这适用于不设置 playerid
,但如果设置了它,它会在末尾附加 .php。所以它认为 player/1
是 player/1.php
。这当然打破了我试图 运行 获取玩家信息的查询。
您的第一次尝试是正确的,但您需要禁用 MultiViews
选项。
Options -MultiViews
RewriteEngine On
RewriteRule ^player/([^/]+)/?$ player.php?playerid= [NC,L,QSA]
选项 MultiViews
由 Apache's content negotiation module
使用,它在 之前 mod_rewrite
运行并使 Apache 服务器匹配文件的扩展名。所以 /file
可以在 URL 中,但它会服务于 /file.php
.