从url目录请求PHP文件
这可能是一个非常简单的问题。不管怎样,如何在没有请求的情况下使用url中的变量。例如:从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.....
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
检索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 yourissue.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'];