Mod-rewrite - 如何使此规则有效?

时间:2013-11-28 20:52:36

标签: php .htaccess mod-rewrite

我的网站有一个可以调用的单个文件(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中添加/更改以解决此问题?

2 个答案:

答案 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]