【发布时间】: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 中没有任何意义。$_GET是 php 引擎内部 的超全局变量,它与 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