2013-07-15 118 views
1

常見問題,但對我來說太複雜了。htaccess,www重定向假子目錄

這裏是我試圖符合要求:

  1. 根URL http://example.com應該被重定向到http://www.example.com
  2. http://example.com/c/1234567890所有URL應該被重定向到http://www.example.com/c/1234567890(注意「C」假子目錄)
  3. 當進入http://example.com/index.php一個應該被重定向到http://www.example.com(沒有尾隨斜線)
  4. 最重要的是我想,但不能確保頂部直接訪問的子文件夾「xy」在根和javascript文件中免除php文件。

我搜索了很多,並嘗試了很多重寫條件和規則,但htaccess +正則表達式只是從另一個星球爲我。 :/ 對不起,如果這是重複的...

+0

http://example.com/[something]中是否存在不應重定向到http://www,example.com/ [something]的地址?我問,因爲滿足第一個要求的通常方式可以重定向所有相關的路徑,而不僅僅是頂部。 – Paul

+0

嘿,不會有像example.com/[something]這樣的地址,只是example.com/search?=xy。其他一切都包含僞造的子文件夾「c」,這意味着它將成爲example.com/c/[something] – Tobias

+0

因此,如果沒有人查找「c」,但只是將example.com中的所有內容重定向到www.example.com,來到斜線後面,照顧#1和#2,對吧?這是否也適用於#3?不是書面的...#3是正確的,你想要example.com/index.php去www.example.con沒有/也沒有/index.php?或者你想要example.com/index.php去www.example.com/index.php?如果你決定#3是錯誤的,你可以點擊編輯並修改它。 – Paul

回答

2

這些將在文檔根目錄中的htaccess文件。打開重寫引擎

RewriteEngine On 

對於1和2:重定向到 「WWW」 如果根請求或請求用於/c/(something)

RewriteCond %{HTTP_HOST} ^example\.com$ [NC] 
RewriteRule ^(c/.+)?$ http://www.example.com%{REQUEST_URI} [L,R=301] 

對於3:重定向直接請求/index.php只是/

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php 
RewriteRule ^/[L,R=301] 

4:禁止直接訪問/xy/目錄中的任何內容。

RewriteCond %{HTTP_REFERER} !http://(www\.)?example\.com/ [NC] 
RewriteRule ^xy/ - [L,F] 
+0

非常感謝您的回答!我現在嘗試了1-3,但不知何故,只有從[example.com]到[www.example.com]的重定向以及如果在根上很好地移除了尾部的斜槓[/]。 不知道我是否缺少一些東西... – Tobias

+0

#4現在是多餘的,因爲我需要通過Ajax無論如何訪問文件夾[xy]。我應該從最初的問題中刪除它嗎? – Tobias