2013-11-28 49 views
0

我的網站有一個可以調用的文件(index.php),使用控制器我可以顯示不同的頁面。此頁面駐留在辦公室/網頁上。Mod-rewrite - 如何使這個規則有效?

我修改以下列方式的.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未找到錯誤。

使用<script type='text/javascript' src='assets/js/bootstrap.min.js'></script>裏面的html文件,它預計

http://localhost/office/web/sale/chicago/assets/js/bootstrap.min.js 

正確的URL是:

http://localhost/office/web/assets/js/bootstrap.min.js 

等等,所有其他媒體文件。

我需要在我的.htaccess中添加/更改以解決此問題?

回答

1

這純粹是mod_rewrite基礎的解決方案,你能避免寫在資源的完整路徑(JS,圖片,圖像等):

添加上的其他規則上面這條規則:

RewriteRule ^(assets/.+?)$ /office/web/$1 [L,NC,R] 

而且請理解RewriteCond僅適用於非常接下來的RewriteRule。在你的問題中,你只有第一條規則纔有2 RewriteCond,但接下來的兩條規則沒有。

作爲一種替代添加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] 
2

你應該使用絕對的URL來鏈接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> 

讓我知道,如果它是有用的。

+0

是的,這項工作。我已經在想它。但通過這種方式,我每次上傳服務器上的文件時,都需要更改絕對路徑。這是因爲這些文件實際上是html模板...我在考慮更多的.htaccess解決方案。最終,我將不得不使用這個。 – CristiC

+0

@Parkyprg爲什麼改變絕對路徑? –

+0

因爲在本地主機上我有/ office/web /,但在服務器上我有不同的文件路徑(例如/ web/only) – CristiC