从url目录请求PHP文件

从url目录请求PHP文件,php,.htaccess,directory,Php,.htaccess,Directory,这可能是一个非常简单的问题。不管怎样,如何在没有请求的情况下使用url中的变量。例如: www.mysite.com/get.php/id/123 然后,页面从数据库检索ID123 这是怎么做到的?提前谢谢 更新 如果我有以下结构: support/ sys/ issue/ issue.php .htaccess home.php etc.....

这可能是一个非常简单的问题。不管怎样,如何在没有请求的情况下使用url中的变量。例如:

www.mysite.com/get.php/id/123
然后,页面从数据库检索ID123

这是怎么做到的?提前谢谢

更新

如果我有以下结构:

support/
        sys/
            issue/
                  issue.php
            .htaccess
            home.php
            etc.....
使用包含以下内容的.htaccess文件:

RewriteEngine On 
RewriteRule ^/issue/(.*)$ /issue/issue.php?id=$1 [L]
为什么我必须键入:

为了加载文件?当我想打字的时候


此外,文件加载后如何检索id?

您必须使用名为
.htaccess
的文件,在Google上进行搜索,您将找到许多实现此目的的示例。

您将需要(或您平台上的等效文件)要将.htaccess中的
/get.php/id/123
重写为
/get.php?id=123

,您应该添加:

RewriteEngine On
RewriteRule ^id/([^/]*)$ /get.php/?id=$1 [L]

同样像前面提到的海报一样,请确保您的mod_rewrite已激活。

您要查找的是
PATH\u INFO
$\u服务器
变量

发件人:

“路径信息”

包含任何客户端提供的跟踪实际 脚本文件名,但在查询字符串之前(如果可用)。对于 实例,如果当前脚本是通过URL访问的 那么 $\u服务器['PATH\u INFO']将包含/some/stuff

explode()

编辑:使用重写规则将用户的请求URL映射到您的内部结构和/或隐藏脚本名称。但是not要将
PATH\u INFO
转换为
GET
查询,完全没有必要!只要做一个
分解('/',$\u服务器['PATH\u INFO'])
你就到了

另外,看到自己的答案,你不需要任何
preg\u math
es。如果您的数据库只包含数字ID,则只会拒绝为其提供非数字ID。如果出于某种原因,仍然需要检查字符串VAR是否具有数值,请考虑.< /P>
保持简单。不要重新发明轮子

我试了又试了
.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");
}
?>

问题 这是一个非常基本/常见的问题,它源于您的
.htaccess
规则正在重写包含实际存在的目录的url

文件结构 (即目录
issue
.htaccess
文件位于同一目录:
sys

重写问题 然后:

这是行不通的。这是因为(注意:
->
=重定向到):

->
->

示例/测试 使用
var\u dump($\u GET)
和以下URL进行尝试:

输出将始终为:

array(1) { ["id"]=> string(9) "issue.php" } 
解决方案 您有三个主要选择:

  • 添加不重定向真实文件的条件
  • 仅重写数字,例如重写
    issue/123
    ,但不重写
    issue/abc
  • 兼而有之
  • 方法1 方法2 方法3
    检索ID 这是最简单的部分

    $issueid = $_GET['id'];
    

    只是想知道为什么没有人提到你使用

    根据Apache手册:

    RewriteBase指令指定要用于的URL前缀 每目录(htaccess)重写替换 相对路径

    在您的
    /support/sys/issue/.htaccess
    中使用
    RewriteBase
    ,代码将非常简单:

    RewriteEngine On
    RewriteBase /support/sys/issue/
    
    RewriteRule ^([0-9+)/?$ issue.php?id=$1 [L,QSA]
    
    然后在dese your
    issue.php
    中,您可以执行以下操作:

    $id = $_GET['id'];
    

    从URL检索您的id。

    您尝试了什么?这些都是基本知识,我强烈建议你去读一些东西,比如
    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'];
    
    RewriteEngine On
    RewriteBase /support/sys/issue/
    
    RewriteRule ^([0-9+)/?$ issue.php?id=$1 [L,QSA]
    
    $id = $_GET['id'];