2009-06-14 108 views
0

我使用下面的代碼在我的.htaccess:爲什麼這個重寫規則不起作用?

Options +FollowSymlinks 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteCond %{REQUEST_URI} !/$ 
RewriteRule (.*) $1\.php [L] 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)/$ /$1 [R=301,L] 

# Special rewrite rules 
# ideas/<id> 
RewriteRule ^ideas/([0-9]+)$ idea\?id=$1 
# users/<name> 
RewriteRule ^users/(.+)$ users\?name=$1 

的想法/規則正常工作,因爲我希望它,但用戶/規則似乎沒有。它給了我一個HTTP 500錯誤,並且Apache日誌說它超出了可用重定向的數量:

[Sun Jun 14 10:58:39 2009] [error] [client 127.0.0.1]請求超出限制10個內部重定向由於可能的配置錯誤。如果需要,使用'LimitInternalRecursion'來增加限制。使用'LogLevel調試'來獲得回溯。引用:http://localhost/users

我測試它的網址是/ users/ross,它應該可以正常工作。/ideas/1絕對沒問題。

回答

1

嘗試在這個順序:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)/$ /$1 [R=301,L] 

RewriteRule ^ideas/([0-9]+)$ idea?id=$1 
RewriteRule ^users/(.+)$ users?name=$1 

RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule (.*) $1.php [L] 
+0

這將導致思想/ 頁停止與相同的錯誤工作。 – Ross 2009-06-14 10:22:23

+0

服務器日誌對此有何評論? 500錯誤可能意味着任何事情。 – Gumbo 2009-06-14 10:56:38

+0

更新了問題。 – Ross 2009-06-14 12:05:07

1

什麼可以幫助你調試的情況是遠程進行重寫(例如讓他們發送HTTP重定向)。通過這種方式,您將看到如何重寫請求,從而幫助您解決問題。

1

我是否有權假設你有users.php和idea.php文件?然後,您可以直接重定向到該文件,而無需再次進行重寫。因此,對於那些兩個規則:

RewriteRule ^ideas/([0-9]+)$ idea.php?id=$1 
RewriteRule ^users/(.+)$ users.php?name=$1 

(也:沒必要逃避的結果問號)

順便說一句:爲什麼users.php複數而idea.php是不是?你如何處理/想法/ abc等?

0

添加/文件固定在此之前:

RewriteRule ^ideas/([0-9]+)$ ideas?id=$1 
RewriteRule ^users/(.+)$ users?name=$1 

到:

RewriteRule ^ideas/([0-9]+)$ /ideas?id=$1 
RewriteRule ^users/(.+)$ /users?name=$1