2014-03-01 56 views
2

我一直在網上搜索,但似乎沒有任何工作。我在Apache和Xampp當地工作。我創建了一個.htaccess文件,並重寫了所有以.php和.html結尾的網址以刪除擴展名,並創建了一個自定義404頁面。一切正常。不過,現在我試圖重寫動態URL看起來像htaccess重寫給本地主機上的錯誤500

/TotinCoblan/update/Wine?id=2

/TotinCoblan/update/Wine/2

,我不斷收到錯誤500,這是我的.htaccess文件。從我的理解,

RewriteCond %{REQUEST_FILENAME} !-f

應避免無限循環。

任何幫助將不勝感激。

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ $1.html 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^/update/Wine/([0-9]+)/?$ /update/Wine?id=$1 [L] 

ErrorDocument 404 TotinCoblan/errors/404 

回答

0

試試這個代碼:

ErrorDocument 404 /TotinCoblan/errors/404 

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule^- [L] 

RewriteRule ^update/Wine/([0-9]+)/?$ /update/Wine?id=$1 [L,QSA] 

RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 

RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ $1.html 
+0

謝謝!它工作得很好。但是,我意識到我的css文件沒有正確加載,所以我不得不在我的所有文件中使用絕對路徑。 – amunte

+0

是的,對於css/js/images使用絕對路徑總是更好。如果有效的話考慮接受答案。 – anubhava

0

你應該改變你的-f檢查使用%{DOCUMENT_ROOT}${REQUEST_URI}代替。與%{REQUEST_FILENAME}的問題是,mod_rewrite的將部分嘗試將URI映射到一個文件,如果該請求是類似的東西佔了路徑信息,這意味着:

/something/foo/anything/ 

,你碰巧有一個現有的文件/腳本在:

/something/foo.php 

那麼RewriteCond %{REQUEST_FILENAME}\.php -f檢查將是真正的,和URI,它假定你的意思是:

/something/foo.php/anything/ 

而且,像你的代碼做,.php被追加到末尾,而不是:

/something/foo/anything/.php 

,並引起無限循環。嘗試是這樣的:

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}\.php -f 
RewriteRule ^(.*)$ $1.php 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}\.html -f 
RewriteRule ^(.*)$ $1.html 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^/update/Wine/([0-9]+)/?$ /update/Wine?id=$1 [L] 

ErrorDocument 404 TotinCoblan/errors/404 
+0

謝謝你,我試過你的代碼,但是我得到了404錯誤,沒有.php和.html文件...下面的代碼也適用於這些情況。謝謝 – amunte

+0

@對不起,'$'應該是'%' –

0

我終於用這個代碼,我不得不用的RewriteCond%{} REQUEST_FILENAME自-f頁面被重新加載兩個時間後才裝!隨着該說明加載第一次。

RewriteCond %{REQUEST_FILENAME} !-f 
ErrorDocument 404 /TotinCoblan/errors/404 

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^- [L] 

RewriteRule ^update/Wine/([0-9]+)/?$ update/Wine.php?id=$1 [L,QSA] 

RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 

RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ $1.html 
相關問題