2012-07-24 63 views
0

我試圖設置一個.htaccess文件,該文件將每個請求URL作爲GET傳遞到名爲index.php的文件中。唯一的例外是請求URL指向目錄res現有文件夾的mod_rewrite條件

實例:

/wiki/cool-stuff   => index.php?uri=/wiki/cool-stuff 
/wiki/cool-stuff?news=on => index.php?uri=/wiki/cool-stuff&news=on 
/res/cool-photo.jpg  => res/cool-photo.jpg 

兩個問題:

  1. 在第二示例中傳遞給/wiki/cool-stuff的GET變量不傳遞到的index.php
  2. 訪問/res(未/res/! !)突然給我看/res/?uri=res在我的瀏覽器中 a nd index.phpuri=res/。改爲訪問/res/,顯示我index.phpuri=res/並且瀏覽器中的URL保持不變(這是可以的)。

的.htaccess

RewriteEngine on 
RewriteBase /subthing/ 

RewriteCond %{REQUEST_URI} !/res/(.+)$ 
RewriteCond %{REQUEST_URI} !index.php 
RewriteRule (.*)    index.php?uri=$1 

我怎樣才能達到預期的行爲?

回答

1
  1. 嘗試使用查詢字符串,附加標誌,QSA

  2. 讓尾隨斜線可選 - 在正則表達式,這是通過添加?實現。

.htaccess

RewriteEngine on 
RewriteBase /subthing/ 

RewriteCond %{REQUEST_URI} !/res(/.*)?$ 
RewriteCond %{REQUEST_URI} !index.php 
RewriteRule (.*)    index.php?uri=$1 [QSA] 

請注意,我已經調整了正則表達式的/res文件夾會導致/resabc被重定向(如果斜槓是唯一可選件,與res開始任何將匹配。

Apache Mod_Rewrite Documentation

+0

感謝您與'[QSA]'的TIPP。這一工程鰭即這似乎是因爲Firefox的'/ res'在URL欄中變成了'/ res /?uri = res'。它不會出現在Firefox中。我想'/ res /'(沒有任何尾隨的東西)也被重定向到'index.php',你能告訴我如何實現這個嗎? – 2012-07-25 12:40:28

+0

@NiklasR這將重定向/ res /如果我沒有記錯。 Firefox緩存已知的重定向,可能會變得混亂。清除瀏覽記錄,然後請讓我知道是否仍有問題。 – 2012-07-25 13:44:35