2014-05-07 66 views
0

我正在將舊網站移動到新網站的/ archive子目錄中。該網站是所有的HTML有很多完全合格的URL,當它不在檔案文件夾(例如(http://domain.com/pictures/home.html)。這很好,因爲我已將任何未發現的文件重寫到/ archive目錄。htaccess使用散列(#)重寫文件名稱文件名

問題是...很多這些完全合格的URL在文件名中有#,例如http://domain.com/pictures/category#001.html,然後鏈接爲http://domain.com/pictures/category%23001.html。當重寫被應用到這些URL時,服務器沒有找到該文件給出404錯誤,路徑被截斷在%23(例如'/ archive/pictures/category was not found on this server。')

我試過使用[B]標誌,它仍然給出了404錯誤,但文件路徑給出確實存在(例如'/archive/pictures/category#001.html在此服務器上未找到。')。

如果我使用URL中的%23(例如http://domain.com/archive/pictures/category%23001.html)直接導航到存檔目錄中的文件,那麼一切正常。唯一的問題是通過重寫規則

規則添加/歸檔目錄時很簡單:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*) /archive/$1 [B,L,QSA] 

我也試着更換與此規則:

RewriteRule (.*) /archive/%{REQUEST_URI} [B,L,QSA] 

但有同樣的問題。

感謝您的閱讀!

回答

0

最終我能得到服務器去文件的唯一辦法是重新引導,而不是重寫它, URL,使用以下代碼(添加R = 302標誌)。

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*) /archive/$1 [R=302,B,L,QSA] 
1

您需要使用NE標誌在這裏(以避免轉義):

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ((?!archive/).*) /archive/$1 [NE,L,NC] 
+0

使用'NE'標誌仍然不適合我。我能獲得文件的唯一方法就是重定向到它 – anotheruser1488182

+0

你還試過:[NE,L,NC,B]'? – anubhava

相關問題