2010-02-10 100 views
0

好着,當然它不工作,即時通訊仍然是一個的n00b :)htaccess的不工作,因爲它應該

這是我的代碼:

Options +FollowSymLinks 
RewriteEngine on 
RewriteRule (.*)\.css - [S=7] 
RewriteRule (.*)\.jpg - [S=6] 
RewriteRule ^gallery gallery.html [L] 

RewriteRule (.*)/(.*)/ index.html?page=$2 [L] 
RewriteRule (.*)/(.*) index.html?page=$2 [L] 
RewriteRule (.*)/ index.html?page=$1 [L] 
RewriteRule (.*) index.html?page=$1 [L,QSA] 

現在,這工作得很好,如果我嘗試localhost/abc 但它不會工作,如果我嘗試本地主機/ abc/

也,當我嘗試本地主機/ abc/def(或本地主機/ abc/def /爲此事)css文件不被正確包含。我得到一個錯誤,說/abc/def/style.css不存在。 (

但是,代碼不起作用,如果我從最後一條規則中刪除QSA標誌這是在大量的谷歌搜索和閱讀後提出的代碼如果任何人都可以幫忙我會非常感謝。

感謝!

回答

0

排序您的尾隨斜線問題與 (/)?而不是/單獨

?=零或前面的字符

+0

哎。我也嘗試過。但由於某種原因,它不工作。 – hsn 2010-02-10 11:41:07

+0

你做了嗎 RewriteRule(。*)/(。*)(/)?$ index.html?page = $ 2 [L] – 2010-02-10 11:43:55

+0

是的,這就是我試過shaunhare.co.uk – hsn 2010-02-10 11:48:56

0

你應該使用更具體的一個模式。.*表示零個或多個任意字符。這匹配任何東西,甚至是空字符串。

對於您的情況,abc/可能與規則匹配的模式爲(.*)/(.*),而不是您可能假設的規則(.*)/

嘗試[^/]+代替(除了/一個或多個字符)和添加斷言來開始(^)和結束的字符串($):

RewriteRule ^([^/]+)/([^/]+)/$ index.html?page=$2 [L] 
RewriteRule ^([^/]+)/([^/]+)$ index.html?page=$2 [L] 
RewriteRule ^([^/]+)/$ index.html?page=$1 [L] 
RewriteRule ^([^/]+)$ index.html?page=$1 [L,QSA] 

正如shaunhare.co.uk已經說過,您可以通過附加?量詞將其設置後/可選:

RewriteRule ^([^/]+)/([^/]+)/?$ index.html?page=$2 [L] 
RewriteRule ^([^/]+)/?$ index.html?page=$1 [L] 
+0

嘿秋葵。我嘗試了你建議的規則。不幸的是,無論我嘗試什麼網址,它都會被重定向到index.html。 有什麼建議嗎?感謝迄今爲止所有的幫助! – hsn 2010-02-10 11:48:20

+0

嘿秋葵。經過一些調整,我得到了這些規則的工作: RewriteRule ^([^ /] +)/([^ /] +)(/)?$ index.html?page = $ 2 [L,QSA] RewriteRule^[^ /] +)(/)?$ index.html?page = $ 1 [L,QSA] RewriteRule ^(。*)(/)?$ index.html?page = home [L,QSA] 但該css文件也正在重寫(例如:/abc/styles.css)任何建議? – hsn 2010-02-10 11:58:56

+0

@hsn:你不需要把單個'/'放在一個像'(/)'這樣的組中; '/?'也可以。如果請求可以映射到現有文件,則可以使用一條規則停止重寫過程:'RewriteCond%{REQUEST_FILENAME} -f RewriteRule^- [L]'將此規則放在其他人面前,它應該可以工作。那麼你甚至不需要前兩條規則。 – Gumbo 2010-02-10 12:14:21

相關問題