2010-01-10 84 views
0

這是我的htaccess文件背後邏輯AND在htaccess modrewrite?

RewriteBase/

RewriteCond %{HTTP_HOST} ^example.com [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301] 

RewriteCond %{REQUEST_URI} !^/chat/ 
RewriteCond %{REQUEST_URI} !^/m/ 
RewriteCond %{REQUEST_URI} !^/__admin/ 
RewriteCond %{REQUEST_URI} !^/gzip_headers.php 
RewriteCond %{REQUEST_URI} !^/phpfreechat/ 
RewriteCond %{REQUEST_URI} !^/_temp/ 


RewriteRule ^.+\.php$ index.php [L] 

RewriteRule ^.*\.css gzip_headers.php [L] 
RewriteRule ^.*\.js gzip_headers.php [L] 

RewriteRule ^classifieds/ /index.php [L] 

RewriteCond %{REQUEST_URI} !^/movies/. 
RewriteRule ^movies/ /index.php [L] 

RewriteCond %{REQUEST_URI} !^/games/. 
RewriteRule ^games/ /index.php [L] 

RewriteRule ^jntu/ /index.php [L] 
RewriteRule ^news/ /index.php [L] 

我的想法主要是,

  • 着一切到public_html/index.php的(除了一些目錄)
  • 轉發所有的JS和CSS爲gzip文件,(我這樣做基本上是因爲我不是jsut gzipping他們,但也壓縮在phpfile)
  • 問題是,當我加載子目錄的圖像也被重定向到index.php,所以只是創建對於這些目錄條件和他們存儲圖像像RewriteCond %{REQUEST_URI} !^/games/.

我想使簡單的做這樣的東西

  • 着一切的index.php(除了在上面的一些條件)
  • 將css和js轉發到gzip文件
  • 只有存在時才能將圖像和flash以及其他一些MIME類型直接加載。 (JPG | GIF | PNG |瑞士法郎| FLV | MP4 | 3GP | MP3 | ZIP | RAR | EXE)

喜歡的東西邏輯與REQUEST_URI和-f標誌我想

回答

1

嘗試下列規則:

RewriteCond %{HTTP_HOST} =example.com [NC] 
RewriteRule^http://www.example.com%{REQUEST_URI} [L,R=301] 

RewriteRule .*\.(js|css)$ gzip_headers.php [L] 

RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule .+\.(jpg|gif|png|swf|flv|mp4|3gp|mp3|zip|rar|exe)$ - [L] 

RewriteCond %{REQUEST_URI} !^/(gzip_headers|index)\.php$ 
RewriteCond %{REQUEST_URI} !^/(chat|m|__admin|phpfreechat|_temp)/ 
RewriteRule ^.+\.php$ index.php [L] 
+0

這真棒:)正是我在找的東西,我在最後加了這個,希望它是正確的 'RewriteCond%{REQUEST_FILENAME}!-f RewriteCond% {REQUEST_URI}^/(電影|遊戲| jntu |新聞|分類廣告)/ RewriteRule ^。 /index.php [L]' – 2010-01-11 07:21:54

0

我不知道爲什麼如果您的規則只重定向以「.php」結尾的URI,您的圖片將被重定向。這應該排除規則中的所有其他文件擴展名。

我也不確定你的意思是需要'邏輯和'。如果在RewriteRule之前有RewriteCond行,那麼這些條件會進行「與」運算,並且只有在全部條件爲真時才應用該規則。

你不能使用modrewrite來檢查文件的存在,並說「如果文件存在,不適用任何規則,只提供文件」。

我認爲最好的解決方案是使用名爲'static'或'images'的單個頂級目錄,在其中放置所有文件並將其從規則中排除,或者具有更寬泛的匹配規則。

因此,例如,您可以使'靜態'或'圖像'爲特殊的目錄名稱,並排除任何包含.*/images/.*的URL。然後/something/images/image.jpg/something/else/images/image.jpg都將被排除,並且文件將被提供。

另一個拙劣的方法是從PHP提供文件。所以在PHP中,您需要將$_SERVER['REQUEST_URI']轉換爲文件名並查看它是否存在。如果是這樣,你可以將文件內容寫入PHP輸出流,儘管這不會像把它留給Apache一樣高效,實際上我不會推薦它。

但就像我之前說過的,如果你的規則只匹配以.php結尾的文件,那麼你的圖像不應該被重定向。我想知道爲什麼這是第一次發生。有一種方法可以打開mod_rewrite的調試日誌記錄,但你必須要Google。

+0

嗨,被的arent顯示的圖像,因爲PHP的重寫規則正在被這些 的RewriteCond%{REQUEST_URI} ^覆蓋/遊戲/! RewriteRule^games//index.php [L] – 2010-01-11 07:12:53