将URL信息传递到PHP页面中


Passing URL information into a PHP page

我正在创建一个网站,该网站将为每个媒体设备上传文件。我想创建一个URL,以便用户传入设备ID和设备签名,如:

http://somesite/device/deviceId?devicesig='ABC123'

在服务器上,我将其传递到我的PHP页面。(我在/device目录中写了一个简单的PHP页面,所以我知道我正在提供该目录中的内容)

我在Windows上使用XAMPP,我已经配置了.htaccess:

Options FollowSymLinks
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ upload.php?q=$1 [PT,L]
</IfModule> 

以及设置:

<IfModule dir_module>
    DirectoryIndex upload.php
</IfModule>

我可以作为(当然缺少实际的设备ID)访问URL

http://localhost/device/upload.php?type=event&devicesig=e4876

但我想以的身份访问该URL

http://localhost/device/A1234?type=event&devicesig=e4876

当我这样做时,我会收到一个"在此服务器上找不到请求的URL。如果您手动输入URL,请检查拼写并重试。"错误。

如何定义/编码,使"A1234"被视为设备ID,而不是目录的某个部分?

谢谢!

更新:

当我阅读下面的评论时,这让我怀疑我的核心假设是否不正确。首先,我假设要获取设备的所有文件,并获取特定的文件,我将使用以下get语句:

GET /device/ABC123
GET /device/ABC123/file1.dat

因此,我的POST语句将匹配该层次结构:

POST /device/ABC123/file1.dat

对于下面的评论,这是否意味着我必须获取整个URL,并在主机和资源("设备")之后对其进行解析,才能获得正确的设备("BC123")?

你可以试试这个:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ upload.php?q=$1 [PT,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^device/(.*)$ /device/upload.php?deviceId=$1 [QSA,L]

为什么你没有这样的url:localhost/设备?设备Id=A1234&type=事件&devicesig=e4876