2013-04-21 131 views
1

在開始時,我希望您注意,我曾嘗試在谷歌或在計算器中查找解決方案。我發現了一些提示,但它們不適合我,或者我根本沒有按照說明操作。Mod_rewrite - 圖像,樣式和腳本丟失

所以,這裏是我的地盤目錄:

www.domain.pl/index.php <--index file 
www.domain.pl/images/  <--images folder 
www.domain.pl/styles/  <--styles folder, for now just 1 css file 
www.domain.pl/script/  <--scripts folder, js files, and 1 php file called with include 
www.domain.pl/font/  <--font files 

現在,當我打開我的網站www.domain.plwww.domain.pl/index.php它就像一個魅力。但我希望能夠添加一些參數,例如www.domain.pl/index.php?action=dosmth,但它對用戶來說不太好,所以這就是我想用mod改寫的地方。

現在來棘手的部分,我想它看起來像www.domain.pl/index/actionparam/但是當我這樣做時,我在控制檯中得到錯誤,說我的圖像,腳本和css不能被加載/找到。 (我想重寫它這樣:RewriteRule ^index/([^-]+)/script/jquery-1.7.1.min.js$ script/jquery-1.7.1.min.js [L],但我不能用它爲每一個圖像,腳本,CSS或字體文件我們需要有更好的辦法

所以,我的國防部重寫迄今:。

Options FollowSymLinks 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ http://domain.pl/$1/ [L,R=301] 

RewriteRule ^index.html$ index.php [L] 
RewriteRule ^index/$ index.php [L] 
RewriteRule ^index/([^-]+)/$ index.php?action=$1 [L] 

第一部分,我將嘗試添加 「斜線」,在URL的末尾,如果用戶didnt把它放在那裏 http://domain.pl/index - >http://domain.pl/index/http://domain.pl/index/myaction - >http://domain.pl/index/myaction/

問題
是否有可能以某種方式跳過文件夾與圖像,腳本等重寫時?或者我怎麼能一次重寫所有圖像?

其他問題
http://domain.pl/myaction/重定向直奔http://domain.pl/index.php?action=myaction向右走,而不需要把/index/在那裏呢?是的,我正在學習mod重寫。

+0

你應該用一個簡單的PHP腳本路由器和你的htaccess簡單FallbackResource的index.php,我真的不知道是怎麼來的PHP webdevs是唯一仍然代碼像它的1999年... – mpm 2013-04-21 12:50:10

回答

1

您不必在請求中包含index,只需要參數。例如:

請求:http://domain.pl/myaction

Options +FollowSymlinks -MultiViews 
RewriteEngine On 
RewriteBase/

# Exclude existing files and directories. 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule .* - [L] 

# Get the parameter and pass it to index.php 
RewriteCond %{REQUEST_URI} !index\.php [NC] 
RewriteRule ^([^/]+)/? /index.php?action=$1 [L,NC] 
+0

很好的答案。像魅力一樣工作,但在我接受它之前,我很想學習一些東西。 '-MultiViews'在這裏做了什麼? – Kedor 2013-04-21 19:11:34

+0

[MultiViews](http://httpd.apache.org/docs/2.2/mod/mod_negotiation.html#multiviews)是一種涉及[content negotiation]的搜索形式(http://httpd.apache.org/docs /2.2/content-negotiation.html)。基本上意味着服務器從幾個可用文檔之一中選擇最能匹配客戶端功能的文檔*。由於啓用了該選項,'mod_rewrite'不能正常工作,就我所見,確保禁用是個好主意。作爲一個方面說明,根據Apache文檔,FollowSymlinks選項對mod_rewrite是必須的。 – 2013-04-21 21:38:17