这是对我之前发的一个问题的新理解:
我有一个 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 的要求,这里有一个例子:
- 以 subdomain.example.com/test.html 为例
- test.html 引用
<script src="/code/js/test.class.js" type="text/javascript" ></script>
- 在 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/