我的网站有一个可以调用的单个文件(index.php),使用控制器我可以显示不同的页面。此页面位于办公室/网站。
我通过以下方式修改了我的.htaccess:
Options +FollowSymlinks
RewriteEngine On # Turn on the rewriting engine
#skip existing files or directories
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#everything else goes to index.php
RewriteRule ^sale/chicago/?$ /office/web/index.php?action=w_filter&type=1&zone=3 [NC,L]
RewriteRule ^sale/?$ /office/web/index.php?action=w_filter&type=1 [NC,L]
RewriteRule ^rent/?$ /office/web/index.php?action=w_filter&type=2 [NC,L]
访问http://localhost/office/web/sale/chicago/
时,页面会加载,因此主要规则正在运行。
但是,所需的所有其他文件(css,js ...)都会给出404 Not found错误。
在html文件中使用<script type='text/javascript' src='assets/js/bootstrap.min.js'></script>
,它需要
http://localhost/office/web/sale/chicago/assets/js/bootstrap.min.js
正确的网址是:
http://localhost/office/web/assets/js/bootstrap.min.js
依此类推,适用于所有其他媒体文件。
我需要在.htaccess中添加/更改以解决此问题?
答案 0 :(得分:2)
您应该使用绝对网址链接js和css。
而不是
<script type='text/javascript' src='assets/js/bootstrap.min.js'></script>
试试这个
<script type='text/javascript' src='/office/web/assets/js/bootstrap.min.js'></script>
让我知道它是否有用。
答案 1 :(得分:1)
这是基于纯mod_rewrite
的解决方案,您可以避免在资源(js,图像,图像等)中写入完整路径:
在其他规则之上添加此规则:
RewriteRule ^(assets/.+?)$ /office/web/$1 [L,NC,R]
另请注意,RewriteCond
仅适用于下一个RewriteRule
。在您的问题中,您只有2 RewriteCond
仅用于第一个规则,但接下来有2个规则没有。
作为为每个规则添加RewriteCond
的替代方法,您可以将此规则置于顶部,以跳过所有文件/目录的重写规则:
## If the request is for a valid directory
RewriteCond %{REQUEST_FILENAME} -d [OR]
## If the request is for a valid file
RewriteCond %{REQUEST_FILENAME} -f [OR]
## don't do anything
RewriteRule ^ - [L]