2013-07-10 49 views
0

我需要重定向到http://site.com/language/arg1/arg2http://site.com/language/mainpage/explore/arg1/arg2如何到我的網站重定向.htaccess的

我沒有用的.htaccess大賽經驗,所以我有一個問題。

RewriteEngine On 
RewriteCond %{HTTP_HOST} site.com$ [NC] 
RewriteCond %{HTTP_HOST} !mainpage$ 
RewriteRule ^(.*)$ http://site.com/???/mainpage/explore/$1 [R=301,L] 

第一個問題:結果是許多重定向(310個ERR_TOO_MANY_REDIRECTS)。我猜,RewriteCond %{HTTP_HOST} !mainpage$錯誤?

第二個問題:「語言」部分可能需要幾個變體(「ru」,「en」等)。我必須寫而不是「???」在第四行?

回答

1

你可以做到這一點也很喜歡

$route['language/(:any)/(:any)'] = "language/mainpage/explore/$1/$2"; 

在.htaccess

RewriteEngine on 
RewriteRule ^language/([^//]+)/([^//]+)$ language/mainpage/explore/$1/$2 [QSA,L] 
+0

我已經修改了routes.php,我不想去碰它。但是,謝謝你的回答 – indapublic

+0

我的歉意,我錯了。使用routes.php解決方案更好。謝謝 – indapublic

1

沒有測試,但是這應該是你要搜索的內容:

RewriteEngine On 
RewriteCond %{HTTP_HOST} site.com$ [NC] 
RewriteCond %{REQUEST_URI} !/mainpage/ 
RewriteRule ^([A-Za-z]+)/(.*)$ http://site.com/$1/mainpage/explore/$2 [R=301,L] 
  • 更改第二{HTTP_HOST}{REQUEST_URI}mainpage是不是在你的主機名)
  • 從取出$您第二個條件(mainpage不在您的uri的末尾)
  • 使用兩個捕獲組,一個用於語言,第二個用於參數
  • 限制語:只允許一個或多個字母與([A-Za-z]+)

注:您的代碼將用於site.com通過CI路由在routes.php只工作,不www.site.com

+0

我認爲這正是我需要的,但我還有一個問題。我在.htaccess 'RewriteEngine敘述在 的RewriteCond%{} REQUEST_FILENAME!-f 的RewriteCond%{} REQUEST_FILENAME!-d 重寫規則部分。*的index.php/$ 0 PT,L]' 我需要將它們合併或修改你的RewriteRule線? – indapublic

+1

@indapublic你應該沒問題 - '主頁/探索'規則將強制瀏覽器重新加載頁面,所以你的條件尋找一個有效的文件名仍然在第二頁加載處理。另外,RewriteCond指令只適用於跟在它們後面的第一個RewriteRule;所以你可以有多個RewriteCond/RewriteRule配對,沒有任何額外的語法來分開它們。 –

相關問題