【问题标题】:PHP File request from url directory来自 url 目录的 PHP 文件请求
【发布时间】:2013-10-05 15:42:39
【问题描述】:
【问题讨论】:
标签:
php
.htaccess
directory
【解决方案1】:
只是想知道为什么没有答案提到你使用RewriteBase
根据 Apache 手册:
RewriteBase 指令指定要用于的 URL 前缀
每个目录 (htaccess) 的 RewriteRule 指令替换
相对路径。
在您的/support/sys/issue/.htaccess 中使用RewriteBase,代码将很简单:
RewriteEngine On
RewriteBase /support/sys/issue/
RewriteRule ^([0-9+)/?$ issue.php?id=$1 [L,QSA]
然后在你的issue.php 中你可以这样做:
$id = $_GET['id'];
从 URL 中检索您的 ID。
【解决方案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]
方法3
RewriteEngine ON
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^issue/(\d*)/*$ issue/issue.php?id=$1 [L]
检索 ID
这是最简单的部分......
$issueid = $_GET['id'];
【解决方案4】:
我尝试并尝试了.htaccess 方法,但无济于事。所以我尝试了一个 PHP 解决方案并想出了这个。
问题.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");
}
?>
【解决方案5】:
在您的 .htaccess 中,您应该添加:
RewriteEngine On
RewriteRule ^id/([^/]*)$ /get.php/?id=$1 [L]
与之前提到的海报一样,请确保您的 mod_rewrite 已激活。
【解决方案6】:
您将需要mod_rewrite(或您平台上的等效项)将/get.php/id/123 重写为/get.php?id=123。
【解决方案7】:
您必须使用一个名为 .htaccess 的文件,在 Google 上进行搜索,您会发现很多示例。