登录 注册

登录

问题 SEF开启后的文件路径问题

更多
2015年07月08日 07:42 #1 作者: shenkwen
我有一个图片文件文件在 JOOMLA_ROOT/images/ 目录下,我要在 mysite/menu/submenu 页面调用这个图片,如果sef没开的话,我只要用images/image.png即可。但是开了sef之后,在mysite/menu/submenu 页面时当前的URL变成mysite/index.php/menu/submenu,结果我要用 ../../../images.png来调用这个图片。但是这样很有问题,如果我把网站整体转移到一个子目录下,这个链接就失效了,如果submenu下面再来一个子菜单,当前的URL变成mysite/index.php/menu/submenu/subsubmenu,上面的路径也会失效。
该怎么解决这个问题呢?

登录 或者   注册一个会员帐号 来参与讨论

更多
2015年07月08日 12:29 #2 作者: Joomla之门
我个人认为,开启SEF 之后网址里面还带有 /index.php/ 这个片段的,本身就是 SEF 失败。或许有些人不这么看,因为 SEF 好像也没什么国际标准。但是我还是坚持认为:这样的 SEF 不如不要吧。

图片是静态文档。存放的位置本身就是固定的,那么它在互联网上的网址也是固定、唯一的。如果在同一个域名之下,开启或关闭 SEF 就能导致图片路径变化,说明你插入图片的方式有问题。一般建议使用相对路径来插入图片,如果你的 Joomla 某些设置干扰到了图片路径,那么建议换用绝对路径(src="/images/image.png")插入图片。

如果还不能解决,请通过淘宝旺旺或 email 提供你网站的管理员账号。

付费下载 Joomla 3 扩展汉化版: 我要付费支持 Joomla 之门!

登录 或者   注册一个会员帐号 来参与讨论

更多
2015年07月09日 05:24 #3 作者: shenkwen
我说的这个SEF是Joomla自带的那个啊。如果不用这个有什么其他的可以用呢?
用绝对路径不是不可以,但是如果我的网站整体转移到另一个网址或者转移到原网站的一个子目录下,链接就要失效了。之所以用相对路径本身就是为了解决绝对路径的这个问题啊。
实际上,我是用了一小段js动态的载入另外的js文件,代码如下:
var j = jQuery.noConflict();
 
function loadJS(){
    var i,l = arguments.length;
    for (i=0;i<l;i++){
        var t = document.createElement('script');
        t.src = arguments[i];
        document.body.appendChild(t);
    }
}
 
j(document).ready(function(){
     loadJS('1.js','2.js','3.js');
})

这段代码本身是在一个ready.js里面,而ready.js是在joomla_root/custom下面,要动态载入的1.js等几个文件也在同一个目录下,如果不开sef,这样是没问题的,但是开了sef后就不行了。
网址是http://nyaii.com/t/index.php/pages/blog/ddd,我没有你的email和淘宝,但是你可以在dev tool中看到上述的代码。如果不行的话请给我email我可以把后台发给你。

登录 或者   注册一个会员帐号 来参与讨论

更多
2015年07月09日 07:32 #4 作者: Joomla之门
我了解绝对路径潜藏的弊端。不过,绝对路径与域名变化没关系,只与“将网站移动到子目录”这种情况有关,而这种情况纯属小概率事件。在暂时无法解决 JS 正确加载问题时,换用绝对路径如果可行,不妨先用用。

虽然我对 PHP 及 JS 开发不懂,但是我感觉你这种加载 JS 的方案似乎不太怎么符合 Joomla 的理念。你应该把你的 JS 设计成插件形式在 HEAD 部分加载,似乎就可以避开 SEF 的干扰。顺便说一下我这个外行的观点:在 ready.js 里面加载 1.js 或者 2.js 或者 3.js 这种做法,看起来很不专业。这是多复杂的功能要这么复杂的设计呢?难道没有一个现成的 Joomla 扩展可以实现你的目标吗?

我的邮箱 这个 E-mail 受反垃圾邮件程序保护,您需要启用 JavaScript 才能查看。 在论坛公布过多次,如果你没注意过,使用本站顶部菜单上的“联系”,里面就有邮件表单;我的淘宝旺旺账号 joomlagate 同样在论坛公布过多次,如果你没注意过,本站首页好像有旺旺联系按钮。如果方便,请提供一下你的网站管理员账号,我可以进一步研究。

你好像从来没提到过你的网址域名,所以我用 devtool 实际上暂时还找不到你的网站。

付费下载 Joomla 3 扩展汉化版: 我要付费支持 Joomla 之门!

登录 或者   注册一个会员帐号 来参与讨论

更多
2015年07月10日 07:59 #5 作者: shenkwen
网站后台已发到你邮箱。

要加载JS确实有很多插件可以用,但我这个目的是在于测试,所以随便写几行还比去找插件更快。关键是在于这个路径的问题,即使不是加载js,只是在CSS中加载图片的话也会碰到同样的问题。

登录 或者   注册一个会员帐号 来参与讨论

更多
2015年07月10日 19:41 #6 作者: Joomla之门
刚刚根据你提供的管理员账号访问了你网站后台,查看了“系统信息”,当我看到你购买的是 Bluehost 主机时,就明白了这些问题的根源原来是因为你购买了一个不支持 Joomla 的虚拟主机!

查看了一下 PHP 配置,貌似没有开启 Apache 的 mod_rewrite 模块,这就使得你的 SEF 网址中无法去除 /index.php/ 这一段。

另外,你给的 FTP 虽然账号密码都正确,但是无法读取出目录列表,所以我无法进行任何操作。FTP 软件的日志记录:

状态: 连接建立,等待欢迎消息...
状态: 初始化 TLS 中...
状态: 正在验证证书...
状态: TLS 连接已建立。
状态: 服务器不支持非 ASCII 字符。
状态: 已连接
状态: 读取目录列表...
命令: PWD
响应: 257 "/" is your current location
命令: TYPE I
响应: 200 TYPE is now 8-bit binary
命令: PASV
响应: 227 Entering Passive Mode (50,87,248,211,187,6)
命令: MLSD
错误: 20 无活动后连接超时
错误: 读取目录列表失败


由于无法登录 FTP ,我想要做一些简单的尝试也做不了。如果方便,请修复 FTP 连接问题,然后我再试试有没有办法帮你解决 SEF 的问题。

你抽空问问 bluehost 客服,能否给你开启 mod_rewrite 。

付费下载 Joomla 3 扩展汉化版: 我要付费支持 Joomla 之门!

登录 或者   注册一个会员帐号 来参与讨论