2009-07-20 77 views
1
Options +FollowSymlinks 
RewriteEngine On 
RewriteBase/

##RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !\.(js|ico|gif|jpg|png|css)$ [NC] 
RewriteCond %{REQUEST_FILENAME} !^index.php [NC] 
RewriteCond %{REQUEST_FILENAME} !^$ [NC] 
RewriteCond %{REQUEST_FILENAME} !-d 

## RewriteRule ^/([a-zA-Z_+-]+).php$ index.php?p=%1 [R=301] 
## RewriteRule ^/?([-a-zA-Z0-9_+]+)$ index.php?p=$1 [R=301,L] 
## RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php?b={REQUEST_FILENAME} 
RewriteRule * index.php?p={REQUEST_FILENAME} [R=301,L] 

上面可以看到我嘗試重定向不是現有目錄中的任何要求,是不是和的index.php是不是一個靜態的資源重定向到index.php 2 P = resourcename國防部重寫大部分請求到index.php

我沒有任何運氣。基本上這樣做的目的是將靜態和舊的URL重新定向到新的URL,因爲我剛剛重寫了一箇舊網站。

PHP將處理重定向邏輯。

此刻此代碼會導致內部服務器錯誤,因此我認爲它是在重定向循環中捕獲的。我做錯了什麼?經過漫長的一天後,我的大腦被炸開了。

回答

1

這段代碼最終解決了我的問題。

感謝您的幫助,但。

Options +FollowSymlinks 
RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !index.php 
RewriteRule ^/?([-a-zA-Z0-9_+]+).php$ /$1 [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^/?([-a-zA-Z0-9_+]+)$ index.php?p=$1 [L] 
0

您在變量(%{REQUEST_FILENAME}),並應重複零次或多次表達的前忘了%*僅僅是一個量詞):

RewriteRule .* index.php?p=%{REQUEST_FILENAME} [R=301,L] 
+0

謝謝,現在糾正了。它仍然是壞的... – 2009-07-20 14:23:14

2

未經檢驗的,但值得一試:

RewriteRule .* /index.php?p={REQUEST_FILENAME} [R=301,L] 

「。*」部分表示您希望匹配1個或多個字符(它們中的任何一個)。並且「index.php」前面的「/」可能不是強制性的,但即使您已將RewriteBase選項設置爲「/」,也會使事情更加清晰。

您可能還想在括號之間添加參數「QS」,以確保獲得查詢可能傳遞的查詢字符串(將爲[QS,R = 301,L])。希望這有效,這有助於:)

編輯:也有「{REQUEST_FILENAME}」前面的「%」,正如Gumbo所述。

+0

傳遞查詢字符串的標誌是`QSA` – jason 2009-07-20 14:33:16