我需要像 wordpress 那样创建普通的 url。例如:https://www.website.ext/mypage并让他们从数据库加载页面,而不仅仅是静态页面文件。但就像 wordpress 和其他 cms 的做法一样。
url参数的使用我很清楚,比如 /mypage?ID=124&fname=John 但那些都是马虎,也可以邀请黑客。如果我可以避免的话,我不希望在我的网址中出现这些东西。
他们如何拥有只存在于数据库中的页面的 url?如何将https://www.website.ext/mypage连接到浏览器中显示的内容,而没有实际的“mypage”文件,并且仍然拥有这些干净的 url?
我只是不知道它是如何完成的。我对 .htaccess 的东西有点搞砸了,但我并没有真正受过 htaccess 的教育。
我想我应该补充一点,我正在使用 php7 和 MySQL 数据库。
您可以通过重定向入口页面(例如index.php
)上的流量来模拟它。然后根据请求的 URL 执行一些逻辑以根据$_SERVER["QUERY_STRING"]
您可以使用的其他 url 参数(例如$_GET
全局变量)呈现实际页面。
您可以通过在 上使用.htaccess
诸如此类的将流量重定向到单个入口点apache
。
RewriteEngine On
RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [L,QSA]
Options -Indexes
我创建了一个个人脚本,真正做到这一点,如果你有兴趣,你可以在它的底层逻辑来看看这里在github上。
使用它有缺点,例如404
在您自己的路由上处理页面请求。
在被重定向到index.php
并假设你URL
看起来像这样之后https://sample.com/?page=1
您可以添加 aswitch case
以根据该变量呈现页面,例如:
<?php
$page = isset($_GET["page"]) ? $_GET["page"] : 0;
switch($page) {
case 1:
require "sample/page/if/one/page.php";
break;
case 2:
require "sample/page/if/two/page.php";
break;
default:
require "default/page/home.php";
break;
}
这是一个快速而肮脏的例子,但可以通过创建一个路由器类来大大改进。您还可以创建一组可能的页面并检查请求的页面是否在该数组中,然后呈现它,如果没有,则显示您的404
页面。
我只是展示了一个非常简约的例子,使用$_GET
全局变量来要求一些页面,但这也可以用来DB
通过利用变量的值来获取动态数据。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句