【发布时间】:2020-06-25 21:03:26
【问题描述】:
我正在尝试使用 _GET 超全局变量从查询字符串中获取变量。我现在设置项目的方式是使用驱动程序文件来访问我网站中的文件。每个包含的文件作为由主索引文件设置的安全检查,因此您不能直接访问嵌套文件。作为我的设置示例,以下是我的配置方式。
localhost/index.php
define(‘SECURE_CHECK’, true);
include(admin/site.php);
并且被包含的文件只有被包含才能工作
admin/site.php
defined('CHECK_SECURE_ENVOI') or die("Please return to the main page.");
在我的一个管理文件中,我尝试创建一种简洁的方法来根据 URI 请求检索页面,并使用我的 .htaccess 来加强这一点。
if (fnmatch("*dashboard/", $_SERVER['REQUEST_URI'])) {
include(DIR_ADMIN_VIEWS . 'dashboard.php');
} else if (fnmatch("*add-post/", $_SERVER['REQUEST_URI'])) {
include(DIR_ADMIN_VIEWS . 'add-posts.php');
} else if (fnmatch("*edit-post/", $_SERVER['REQUEST_URI'])) {
include(DIR_ADMIN_VIEWS . 'edit-post.php');
} else if (fnmatch("*view-posts/", $_SERVER['REQUEST_URI'])) {
include(DIR_ADMIN_VIEWS . 'view-posts.php');
} else {
include(DIR_ADMIN_VIEWS . 'dashboard.php');
}
任何我的 .htaccess 看起来像:
<IfModule mod_rewrite.c>
Options -MultiViews
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/?(resources)/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule ^(.*) index.php [PT,L] <--- was my original before this issue
RewriteRule ^(.*)$ index.php?edit=$1 [NC,QSA]
</IfModule>
上面的代码使我可以使用localhost/admin/add-post/ 的url 而不是localhost/core/admin/views/add-posts.php。它还有助于增强安全性,使您在没有正确导航的情况下无法访问页面。现在的问题是我似乎无法通过查询字符串获取值。
我尝试了一些类似这样的指南,但我没有成功; Here
我的目标是能够使用像localhost/admin/edit-post/?edit=value 这样的链接
或localhost/admin/edit-post/edit/value 并通过以下类似 isset 检查的方式获取值:
if(isset(_GET[‘edit’])) {
$value = isset(_GET[‘edit’];
//do something
}
我认为我遇到的问题可能与我通过 if/else 进行的管理重定向页面有关,但我不确定。任何帮助将不胜感激。谢谢。
【问题讨论】:
-
你能把 url 用 '/' 分割,然后取最后一条记录,这将是你的价值吗?我认为这会奏效。
-
您能否详细说明或提供一个示例?我没有听懂你想说的话。
-
您好,当您通过 URL 以 "localhost/admin/edit-post/edit/value" 格式传递值时,首先获取当前 URL,然后将字符串拆分为 '/'并取最后一条记录。它会给你价值。
-
对不起,我误会了。问题是与 /edit-post/ 关联的页面无法加载。因此,我可以通过这种方式拆分 URL 来获取值,但我需要分页继续加载,以便我可以使用该值执行操作。如果我导航到 localhost/admin/edit-post/ 然后页面加载,如果我导航到 localhost/admin/edit-post/edit/value/ 页面是空白的。最终,我的管理文件中的 htaccess 或 if/then 进程有问题。
-
所以,这个问题与我的 if/else 语句有关。
} else if (fnmatch("*edit-post/", $_SERVER['REQUEST_URI'])) {行没有说明后面发生的任何事情。添加 * 允许捕获页面参数。至于为什么不加载,页面实际上是在加载仪表板,因为它在不满足任何其他条件时默认为底部语句。 PHP Web,你说的完全正确,这一切都应该奏效。感谢您的帮助,最重要的是注意细节!
标签: php apache .htaccess mod-rewrite