2012-09-09 33 views
1

我有一个网站在Windows上的XAMPP上运行。该网站的根目录位于localhost/sitename /。如何避免使用mod_rewrite发生此错误?

我已经使用.htaccess和mod_rewrite使index.php?app = appname出现在sitename/appname /或sitename/appname。

当我通过sitename/appname(无尾斜杠)访问应用程序时,一切正常。浏览器在sitename/assets/..找到我的图片和CSS,因为它们是相对于当前页面找到的。

问题是,当我通过sitename/appname /(带有斜线)访问应用程序时,浏览器无法找到我的资产文件夹,因为它现在正在尝试查看sitename/appname/assets /。

没有mod重写资产文件夹,我该怎么办才能解决这个问题?

+0

尽可能多的请尝试提供代码/脚本不能正常工作的例子。在这种情况下,包括来自.htaccess的RewriteRule行或者整个.htaccess文件可以帮助人们建议如何最好地帮助你。 – kdmurray

+0

'RewriteRule ^([a-zA-Z0-9 _-] +)$ index.php?app = $ 1' 'RewriteRule ^([a-zA-Z0-9 _-] +)/ $ index.php?app = $ 1' –

回答

1

我猜测没有斜杠你的浏览器认为当前目录是/sitename/而斜杠你的浏览器认为当前目录是/sitename/appname/

因此,假设任何具有相对路径(非以正斜杠开头)的资产(如"assets/image.png")都将假定为基于当前目录。要解决这个问题,您可以通过用正斜杠启动路径来将所有资产路径更改为固定到根的绝对路径,因此前面的示例将变为"/sitename/assets/image.png"。但我认为,尽管你的愿望,以避免资产路径的改写,下面是简单的:

RewriteRule ^/sitename/appname/assets/(.+)$ /sitename/assets/$1 

这将捉对不存在的appname/assets路径任何丢失的请求,并将它们指的是正确的/sitename/assets路径。

+0

是的,我已经完成了完整的mod重写。谢谢。这是跟踪斜杠常见的问题吗?大多数网站是如何解决这个问题的? –

+0

是的,无声的重写会频繁地导致其路径已被重写的页面中的相对链接(图像,样式表,可下载文件等)的麻烦。至于最流行的解决方案,我不知道大多数人会选择什么,但只要解决方案适用于您,那么它就是正确的解决方案。 – Bobulous

2

的问题是,当我通过网站名称访问应用程序/应用程序的名字/(带斜线),浏览器无法找到我的资产文件夹,因为它现在正试图在网站名称/ APPNAME /资产看/。

尾部斜线正在改变相对URI的基础。如果不使用mod_rewrite巫术来解决这个问题,你需要使用<base>标签在你的页面标题添加正确的基础:

<base href="/sitename/appname/"> 

或任何适当的基础应该是。

+0

我不知道基本标签,谢谢。它适用于基本标签和样式标签中的绝对路径。但是,有点不情愿,我会用完整的mod重写。 –

0

看看WordPress在index.php地址为www.example.com/permalink-to-post/上查看帖子时如何处理这个问题,似乎最好的答案是将绝对文件路径用于所有链接,图像和CSS。

在这种情况下,到/ assets /文件夹的每个链接应该是http://localhost/sitename/assets/。 (直到该网站在一个实时网络服务器上)