首页 > 解决方案 > 多人游戏使用php空文件名?

问题描述

海伊

所以我想在php上做一个多人游戏,我采用了随机生成链接的方法。

例如 skribbl.io 游戏,它会在按下“创建私人房间”后,创建一个随机链接让您的朋友加入:

skribbl.io/?random_string
like skribbl.io/?h4fwY8Ef

所以对我来说,看起来他们有一个没有名称的 php 文件,他们提供随机字符串作为参数。但我无法制作无名 php 文件。

所以我选择的是每次用户为我的游戏点击“创建私人匹配”时,一个 php 脚本将复制一个已经存在的包含服务器端工作的 php 脚本,但将其命名为 random_string.php 就像y4aHr329sJ.php玩家会写的那样在 url 中:( mygame.com/y4aHr329sJ 由于 apache .htaccess 规则而没有 .php)

但缺点是,对于每个想要“创建私人房间”的人,我会在服务器上复制更多不必要的文件。

甚至认为我有一个脚本可以在游戏过期后删除所有过期的 random_string.php 文件(在每天开始时运行脚本并删除 1 天前的文件)

我仍然认为这会适得其反。

顺便说一句,我知道做类似的事情,mygame.com/join?random_string但我并不特别喜欢它。

另外,我不喜欢 apache .htaccess自动mygame.com/random_string变成mygame.com/join?random_string,因为有些玩家喜欢从地址栏中复制链接,而不是从“共享此链接”框中复制链接。

另外,如果有一个没有 skribbl.io 使用的问号的解决方案,我会更喜欢它skribbl.io/*?*random_string

您的帮助意义重大。提前致谢!!

标签: phpmultiplayerreal-time-multiplayer

解决方案


实际上,您在根文件夹中有一个 index.php 文件,但可以将 apache 配置为从 URL 中隐藏它。

您可以通过放置这些配置来做到这一点(在.htaccess项目的根目录或虚拟主机配置中)

你需要mod_rewrite启用。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]

如果您想保留 index.html,您可能需要创建如下路径: /rooms/random-room-name并处理房间,如:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/rooms/(.*)$ /index.php?room=$1 [L]

推荐阅读