2016-03-31 37 views
0

我在我的.htaccess文件下面的代碼,這意味着到一個目錄轉換爲查詢字符串參數:的.htaccess重寫規則更改目錄要查詢字符串500內部服務器錯誤

Options +FollowSymLinks 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
# RewriteRule ^g/XXXXXXXXXX-WINEGIFTS1$ g/index.php?u=XXXXXXXXXX-WINEGIFTS [L,QSA] 
RewriteRule ^g/(.*)$ g/index.php?u=$1 [L,QSA] 

所以,http://example.com/g/SOMETEXT應得到重寫爲http://example.com/g/index.php?u=SOMETEXT

就目前而言,它工作正常。

但是,如果我取消了註釋行的註釋,則會出現500內部服務器錯誤。

該行是爲了重寫一個特定的URL,http://example.com/g/XXXXXXXXXX-WINEGIFTS1,如http://example.com/g/index.php?u=XXXXXXXXXX-WINEGIFTS

奇怪的是,我有不同的域上運行完全相同的代碼,在不同的服務器上,並能正常工作。

有什麼想法引起這個錯誤?

謝謝!

回答

1

的問題是,如果你取消對第一條規則,然後第二個規則成爲無條件和它匹配/g/index.php兩次改寫到inself引起無休止的循環改寫。

您可以使用以下

Options +FollowSymLinks 
RewriteEngine On 
##--Skip the all rules bellow if an existent file/dir is requested--## 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 
######### 
RewriteRule ^g/XXXXXXXXXX-WINEGIFTS1$ g/index.php?u=XXXXXXXXXX-WINEGIFTS [L,QSA] 
RewriteRule ^g/(.*)$ g/index.php?u=$1 [L,QSA] 
+0

感謝。我明白你對循環的看法,我認爲(儘管我認爲L屬性可以防止這種情況),但是我仍然在上面的代碼中遇到了500錯誤。 – Mark

+0

@Mark L標誌並不會停止規則處理,它只是告訴引擎退出當前的重寫週期,併爲處理的第二階段提出請求 – starkeen

+0

好的,理解,謝謝。 – Mark

相關問題