php - 尝试使用 mod_rewrite 获取通用的 php/javascript 库

标签 php javascript ajax apache mod-rewrite

这是对我之前发的一个问题的新理解:

我有一个 mod_rewrite 片段,它可以查明 javascript、css、php 文件是否存在于调用它们的子域中(例如 subdomain.example.com)。如果它们不存在,则 apache 将“重定向”到 common.example.com常见的 js、css 和 php 文件所在的位置。见下文:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.(js|css|php)$ http://common.example.com/$1.%2 [L]

这在以下情况下有效:

  • 您明确地将请求的文件名插入地址栏。
  • 如果在 html 标记中引用/链接了 js 或 css,它也适用。

如果

它不起作用
  • url 在 php 或 js 文件中使用(例如,用于 ajax 调用)。相反,它引用找到 html 页面的子域(即,mod_rewrite 没有捕获它):subdomain.example.com

非常感谢您的帮助

编辑

根据 Pekka 的要求,这里有一个例子:

  1. subdomain.example.com/test.html 为例
  2. test.html 引用 <script src="/code/js/test.class.js" type="text/javascript" ></script>
  3. test.class.js 中有 $.ajax({ url: "/code/php/test.php", dataType : "json", data: {cmd : 'someCommand'}, success: callback()});

..

  • 所以在 #2 中,它找到了 common.example.com/code/js/test.class.js (正确!)
  • 但在#3 中,ajax 调用 subdomain.example.com/code/php/test.php (不正确!因为 subdomain )

最佳答案

这是 changing thedomain(事实证明)在重写中更改协议(protocol)的副作用。

通过在 RewriteRule 中指定完整的 URL 而不是文件系统路径,您可以强制服务器为每个请求发送 301 重定向 header 。

AJAX 请求通常为 follow header redirects但是您正在重定向到不同的域,因此违反了 Same Origin Policy !

这意味着对于Ajax 请求,您不能使用这种重定向方法。您必须在 RewriteRule 中指定一个文件系统路径,以便可以在内部进行重写(这样对于浏览器来说,它保持 subdomain.example.com/code/php/test.php)。我不知道这是否可以在您的设置中完成。

关于php - 尝试使用 mod_rewrite 获取通用的 php/javascript 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4131450/

相关文章:

javascript - AJAX问题-onreadystate不起作用

javascript - window.location.reload 在各种设备和浏览器上随机工作

php - 处理ajax请求的TokenMismatchException

javascript - 在我的 Express Controller 中进行 axios 调用,如何返回状态?

javascript - 在哪里将我的 ajax 添加到 Bootstrap 4 的表单验证 javascript 中?

c# - Ajax ModalPopUp Extendar 在执行后面代码中的前几行之前弹出

javascript - 使用 jquery ajax $.load 防止自动 "scrolling up"

php - Symfony 对字符串调用成员函数 format()

php - 在 {foreach} 内排列 reverse_array 中的列表

javascript - 如何将 ajax 结果输出到 php 变量中?