这可能是一个非常简单的问题。无论如何,如何在没有请求的情况下使用url中的变量。例如:
www.mysite.com/get.php/id/123
然后页面从数据库中检索id 123。
这是怎么做到的?提前谢谢!
更新
如果我有以下结构:
support/
sys/
issue/
issue.php
.htaccess
home.php
etc.....
包含以下内容的.htaccess文件:
RewriteEngine On
RewriteRule ^/issue/(.*)$ /issue/issue.php?id=$1 [L]
为什么我要输入:
为了加载文件?当我想输入
时另外,如何在文件加载后检索id?
答案 0 :(得分:2)
这是一个非常基本/常见的问题,源于您的.htaccess
规则正在重写包含实际存在的目录的URL ...
>support
>sys
>issue
issue.php
.htaccess
(即目录issue
和.htaccess
文件位于同一目录中:sys
)
然后:
RewriteEngine ON
RewriteRule ^issue/(.*)/*$ issue/issue.php?id=$1 [L]
# Note the added /* before $. In case people try to access your url with a trailing slash
不行。这是因为(注意:->
=重定向到):
http://www.mysite.com/support/sys/issue/1234
- > http://www.mysite.com/support/sys/issue/issue.php?id=1234
- > http://www.mysite.com/support/sys/issue/issue.php?id=issue.php
使用var_dump($_GET)
和以下网址进行试用:
输出始终为:
array(1) { ["id"]=> string(9) "issue.php" }
您有三个主要选项:
issue/123
但不是issue/abc
RewriteEngine ON
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^issue/(.*)/*$ issue/issue.php?id=$1 [L]
RewriteEngine ON
RewriteRule ^issue/(\d*)/*$ issue/issue.php?id=$1 [L]
RewriteEngine ON
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^issue/(\d*)/*$ issue/issue.php?id=$1 [L]
这是一个简单的部分......
$issueid = $_GET['id'];
答案 1 :(得分:1)
在你的.htaccess中你应该添加:
RewriteEngine On
RewriteRule ^id/([^/]*)$ /get.php/?id=$1 [L]
也像之前提到的海报一样,确保你的mod_rewrite已经激活。
答案 2 :(得分:0)
您必须使用名为.htaccess
的文件,在Google上进行搜索,然后您会找到很多如何实现这一目标的示例。
答案 3 :(得分:0)
您需要mod_rewrite(或平台上的等效文件)才能将/get.php/id/123
重写为/get.php?id=123
。
答案 4 :(得分:0)
您正在寻找的是PATH_INFO
$_SERVER
变量。
来自http://php.net/manual/en/reserved.variables.server.php:
'PATH_INFO'
包含任何客户提供的跟踪实际的路径名信息 脚本文件名,但在查询字符串之前,如果可用。对于 例如,如果通过URL访问当前脚本 那么http://www.example.com/php/path_info.php/some/stuff?foo=bar $ _SERVER ['PATH_INFO']将包含/ some / stuff。
explode()
它并在其各个部分工作。
编辑:使用重写规则将用户的请求网址映射到内部结构和/或隐藏脚本名称。但不将PATH_INFO
转换为GET
查询,这完全没必要!只需做一个explode('/',$_SERVER['PATH_INFO'])
,你就在那里!
此外,看到自己的答案,您不需要任何preg_math
个es。如果您的数据库只包含数字ID,则将其拒绝为非数字ID。如果由于某种原因您仍需要检查字符串var是否具有数值,请考虑is_numeric()。
保持简单。不要重新发明轮子!
答案 5 :(得分:0)
我尝试并尝试了.htaccess
方法,但无济于事。所以我尝试了一个PHP解决方案并想出了这个。
issue.php
<?php
if (strpos($_SERVER['REQUEST_URI'], 'issue.php') !== FALSE){
$url = split('issue.php/', $_SERVER['REQUEST_URI']);
}elseif (strpos($_SERVER['REQUEST_URI'], 'issue') !== FALSE){
$url = split('issue/', $_SERVER['REQUEST_URI']);
}else{
exit("URI REQUESET ERROR");
}
$id = $url[1];
if(preg_match('/[^0-9]/i', $id)) {
exit("Invalid ID");
}
?>
答案 6 :(得分:0)
只是想知道为什么没有答案提到你使用RewriteBase
根据Apache手册:
RewriteBase指令指定要用于的URL前缀 per-directory(htaccess)替换a的RewriteRule指令 相对路径。
在RewriteBase
中使用/support/sys/issue/.htaccess
,代码就是:
RewriteEngine On
RewriteBase /support/sys/issue/
RewriteRule ^([0-9+)/?$ issue.php?id=$1 [L,QSA]
然后让你可以做的issue.php
:
$id = $_GET['id'];
从网址中检索您的ID。