我正在创建一个网站,可以按媒体设备上传文件。我想创建一个URL,以便用户传入deviceId和设备签名,如:
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>
我可以访问URL(当然缺少实际的deviceId)
http://localhost/device/upload.php?type=event&devicesig=e4876
但我想以
的身份访问该网址http://localhost/device/A1234?type=event&devicesig=e4876
当我这样做时,我收到了“ 在此服务器上找不到请求的网址。如果您手动输入了网址,请检查拼写并重试。 “错误。
如何定义/编码使'A1234'被视为deviceId,而不是目录的某些部分?
谢谢!
更新
当我阅读下面的评论时,我想知道我的核心假设是否不正确。首先,我假设要获取设备的所有文件,并获取特定文件,我将使用以下GET语句:
GET /device/ABC123
GET /device/ABC123/file1.dat
因此,我的POST语句将匹配该层次结构:
POST /device/ABC123/file1.dat
对于下面的评论,这是否意味着我必须拿走我的整个网址,并在主机和资源(“设备”)之后解析它,以便获取正确的设备('ABC123')?
答案 0 :(得分:1)
你可以试试这个:
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]
答案 1 :(得分:0)
为什么你没有像这样的网址: ?本地主机/设备的DeviceID = A1234&安培;类型=事件&安培; devicesig = e4876