2010-02-15 120 views
3

我的htaccess並不完全工作:重定向* .PHP清潔URL

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

基本上/blah/about.php應該重定向到/胡說/約

我用笨所以最後一行是處理URL的必需。

重定向工作正常,但我在/胡說得到一個內部服務器錯誤/約

**編輯 - 錯誤日誌:

請求超過了10個內部重定向的上限,由於可能的配置錯誤。如果需要,使用'LimitInternalRecursion'來增加限制。使用'LogLevel debug'來獲得回溯。

+0

什麼服務器錯誤日誌說?你爲什麼使用301重定向? – 2010-02-15 16:51:05

+0

因爲我想改變站點結構在搜索引擎友好的方式,即使用301重定向 – fire 2010-02-15 16:53:18

+0

然後我猜這個問題是不是在重定向,如果你得到一個內部服務器錯誤,但在文件中,並沒有做重定向。 – 2010-02-15 16:58:37

回答

1

感謝@Cryo對他的幫助,這是修復:

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

RewriteRule ^(.*)\.php$ /blah/$1 [R=301,L] 

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

RewriteRule ^(.*)$ /blah/index.php/$1 [L] 
2

我想你只需要改變你的最後一行是:

RewriteRule ^(.*)$ /blah/index.php?/$1 [L] 

我有笨沒有具體的經驗,但總體框架,希望通過中央控制器(的index.php)推送的所有請求,然後從那裏解析請求的URL。

編輯:剛剛更新我的答案與從這裏的例子:http://codeigniter.com/wiki/mod_rewrite/ CodeGo.net,這應該是如何CodeIgniter希望它。

UPDATE:你或許應該複製你的RewriteConds第二重寫規則,它們只適用於第一:

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

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /blah/index.php/$1 [L] 
+0

不需要CI definetly需要那部分:( – fire 2010-02-15 16:56:12

+0

@火剛剛添加?/ $ 1到每個我發佈的鏈接的URL,應該這樣做。 – nortron 2010-02-15 16:58:03

+0

我一直在收到: 由於可能的配置錯誤,請求超過了10個內部重定向的限制。如果需要,使用'LimitInternalRecursion'來增加限制。使用'LogLevel debug'來獲得回溯。 – fire 2010-02-15 16:59:44

-1
Options +FollowSymlinks 
RewriteEngine on 
RewriteRule ^(.*)\$ $1.php [NC] 
+2

我認爲這反過來是OP想要的。 – 2010-02-15 16:55:47

0

什麼:

RewriteRule ^(.*)(\.php)?$ /blah/index.php/$1 [L] 

,並刪除前行。

另外請確保/blah/about.php不存在。

+0

對不起,我需要重定向搜索引擎優化的友好 – fire 2010-02-15 16:55:33