2013-04-10 189 views
0

我有一個mod_rewrite(主要是感謝堆棧成員奧拉夫),從 index.php?URL=pages/the-page.php簡單地the-page重定向。問題是,當請求的頁面不是直接在pages(即,pages/sub)中時,它會重定向我的.css和.js,這是不好的。Mod_rewrite不包括子目錄

我試圖做到的是:

  • 僅改寫在pages文件夾中的文件,而是包括它的所有subdirectores。

重要的是它永遠不會重寫files文件夾的URL。

下面的代碼:

Options +FollowSymlinks 
RewriteEngine on 
# prevent endless loop 
RewriteCond %{ENV:REDIRECT_STATUS} 200 
RewriteRule^- [L] 

# redirect the client 
RewriteCond %{QUERY_STRING} URL=pages/(.+?)\.php 
RewriteRule ^index\.php$ /gr/%1? [R,L] 

# exclude rewriting all files located in /gr/files 
RewriteCond %{REQUEST_URI} !^/gr/files/ 
# rewrite to real content 
RewriteRule ^.*$ /gr/index.php?URL=pages/$0.php [L] 

我花了無數的時間與此代碼的戰鬥。即使較小的更改也會將其引發至404或500錯誤。

它也殺死外部鏈接使它.com/www而不是適當的地址,這是一個問題。

+1

我不知道我的理解,但可能不包括所有真正的文件'RewriteCond%{REQUEST_FILENAME}!-f'可能會有所幫助。 – 2013-04-11 06:06:15

回答

1

你不應該混淆CSS和腳本的mod_rewrite規則。這聽起來像一個相對的URI問題。要麼改變你的鏈接是絕對的URI:

來源:

<link rel="stylesheet" href="style.css" type="text/css"> 

到:

<link rel="stylesheet" href="/style.css" type="text/css"> 

或什麼的絕對路徑 「的style.css」 是。

如果你不想改變所有鏈接,然後添加一個URI基地到您的網頁的標題:

<base href="/"> 
+0

沒有試圖重寫這些文件。 +1爲'',立即修復所有內容。 – 2013-04-16 01:13:42