好的,所以我有一些Javascript与URL重写一起运行;所以,如果我使用相对网址,它会从错误的地方加载内容。
e.g。我在myfunctions.js中有这个功能:
function loadXMLDoc(url,cfunc) {...
如果我从test.com/a/b/c
传递相对网址,则会加载相对于test.com/a/b/c
而不是test.com
的内容。
我显然可以使用绝对URL来解决这个问题,但我需要这个才能在测试服务器和实时服务器上工作。
PHP当前我使用函数获取基本URL并将其替换为绝对URL。
所以在PHP中我有:
//On the test server I run:
define('BASE_URL', 'http://localhost/location/to/www/root');
//And on the live server I run:
define('BASE_URL', 'http://www.test.com/');
然后我在我的PHP中使用它来绝对加载图像,css等;这允许我在测试服务器和实时服务器上使用相同的代码。
我的问题是;这里有什么正确的解决方案?我应该使用类似于我的PHP的Javascript函数来构成绝对URL吗?或者将这个PHP定义传递给.js文件是否可能/一个好主意?
甚至可能有一个重写标志告诉浏览器忽略url中的相对位置,只是从根www位置加载;但是我找不到任何东西。
有什么想法吗?
答案 0 :(得分:2)
只需在您的公共文件(header.php)中定义: -
<script> var baseUrl = '<?php echo BASE_URL;?>';</script>
并将所有js包含在此代码下方并访问此var以供使用。
答案 1 :(得分:2)
包含标签后,请使用以下内容。但请记住,您无法在外部
中使用该变量<script>
var siteBaseURL = '<?php echo BASE_URL;?>';
</script>
因为,PHP将ECHO任何服务器端值并将其作为HTML发送,因此PHP将发送BASE_URL,这样的HTML with JavaSCRIPT将包含在浏览器中。
但是在任何外部JS文件中,比如说
<script src="example.js"/> Here you wont be able to access the above variable.
答案 2 :(得分:0)
每当我在test vs live上开发时,我只使用“/css/location/cssfile.css”(这适用于任何文件),这样我就不必修改任何内容。
然后当我的HTML加载时,它将从正确的位置调用。以上翻译成:
http://localhost/location/to/www/root/css/location/cssfile.css
或
http://test.com/css/location/cssfile.css
这适用于50个网站:
/css/location/file.name
适用于:
http://localhost/location/to/www/root
http://localhost/location/to/www/testsite1
http://localhost/location/to/www/testsite2
http://localhost/location/to/www/testsite3
等