【问题标题】:Understanding htaccess and $_GETs了解 htaccess 和 $_GETs
【发布时间】:2019-08-30 01:49:48
【问题描述】:

这就是我的网站的构建方式...

articles.php 包含布局 html 以显示一个类别的所有文章。 articles.js 包含获取db查询结果并传递给articles.php页面的控制元素。 js 脚本中有一个数据表,显示在articles.php 页面上。 ajax_articles.php 包含查询请求并返回查询结果的 json 文件。 json 文件中包含指向各个文章的链接。该链接的结构是一个干净的 SEO URL(例如,article/001/moby_dick)。

这就是我理解 htaccess 工作的方式。

当用户选择一篇文章时,URL(即https://www.example.com/article/001/moby-dick)通过 htaccess 和 RewriteRule 传递 ^article/([0-9]+)/([a-z_-]+) article.php ?art_id=$1&art_name=$2 [NC,L] 将显示 SEO“漂亮”的 URL,但系统知道的是包含两个参数的 URL,$_GET 可以使用这些参数来获取这两个参数。我对流程的理解是否正确?

我注意到使用 htaccess 我现在必须使用完整路径名来加载支持 (.js) 和图形文件。此外,我无法通过 js $_GET.art_id 和 $_GET.art_name 获取变量。

非常感谢任何帮助。

【问题讨论】:

  • 该描述非常粗略,但并不准确。动态配置文件(“.htaccess”)无法以某种方式决定浏览器中显示的 URL。该配置文件在服务器端运行,URL 显示在客户端。请求的 URL 和重写的 URL 在服务器端都是已知的,实际上是多个重写的请求 URL。
  • $_GET 在 javascript 中没有任何意义。 $_GETphp 引擎内部 的超全局变量,它与 javascript 引擎没有任何关系。一个是服务器端,一个是客户端,它们之间的连接很少,只有http请求,没有更多。
  • 必须通过根文件夹或绝对 URL 访问所有媒体文件的原因是浏览器将斜杠之间的内容视为目录,即使它们在技术上不存在。引入 /article/001/moby-dick 后,浏览器会查找 /article/001 作为当前文件夹。
  • 感谢您的回复。我能够让其中一个模块正常工作,但其他模块仍然存在问题。至于 js 中的 $_GET 请注意我在问题末尾的评论。不记得我在哪里找到它,但几年来我一直在使用以下 js $_GET 代码。变量 $_GET = {0:0}; document.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g, function () { 'use strict'; function decode(s) { return decodeURIComponent(s.split("+").join(" ")); } $_GET[decode(arguments[1])] = decode(arguments[2]); });再次感谢!
  • 我开始了解这些问题。我现在的问题是我不能使用 localhost 进行测试,因为所有文件引用都必须使用完整的文件路径。这对于图像文件可能没问题,但 javascript、CSS、AJAX 以及其他文件都在主站点的子目录中。如果需要完整路径,我该如何进行测试?

标签: javascript php ajax .htaccess


【解决方案1】:

您无法在此配置中使用 javascript 访问 GET 变量,因为它们在 URL 重写后不存在。查询参数已被移除。

您仍然可以使用 window.location.href 和 javascript 中的 .split() 方法从 URL 中提取这些值。

// var myurl = window.location.href; // this will get the string of your current URL. Used manual string in this example
var myurl = "https://www.example.com/article/001/moby-dick"; // manual URL for sake of an executable example

var spliturl = myurl.split("/"); // ["https:","","example.com","article","001","moby-dick"]

var articleid = spliturl[4]; // "001"
var articlename = spliturl[5]; // "moby-dick"

// see the variables in action
console.log("id: ", articleid);
console.log("name: ", articlename);

【讨论】:

    猜你喜欢
    • 2016-01-08
    • 2011-08-21
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 2013-09-11
    • 2015-07-09
    相关资源
    最近更新 更多