2011-01-06 72 views
1

的RewriteCond我在的htdocs目錄結構如下:的Apache的.htaccess上的目錄

htdocs/ 
    .htaccess 
    index.php 
    foo/ 
    bar/ 
    priv/ 

我試圖達到清潔的URL,基本上想要的一切通過index.php路由。我.htaccess文件如下:

Options +FollowSymLinks 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f # <- referring to this next 
RewriteRule .* index.php [L] 

這種運作良好,在這個意義上,我可以訪問的foo/bar/直接在合法的文件,但是我也很能夠訪問priv/文件是什麼,我想不允許。我如何修改上面引用的行,基本上說:「禁用不在priv/中的文件」?


編輯:我試圖避免做「priv/.htaccess」 - >「deny from all」,而是想在index.php像任何其他的「漂亮網址」轉換處理此。

+0

嗨,我會添加一個額外的.htaccess特權拒絕所有訪問。 – 2011-01-06 06:38:56

回答

6

您可以使用條件再添RewriteCond只是爲了匹配^priv/,並結合其OR:

RewriteCond $0 ^priv/ [OR] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .* index.php [L] 

現在適用此規則如果任何匹配的部分路徑與priv/開始後,如果要求不能被映射到現有的文件。

+1

謝謝,這很完美。我真的希望Apache文檔更容易找到東西。 – k4rhlx 2011-01-06 07:15:52

+0

@Gumbo,如果你不介意我再次啓動這樣一個老的步伐,你是否會關心第一個RewriteCond的「$ 0」。不應該只將「$」與RewriteRule一起使用? – Matte 2013-01-07 14:30:51

+0

@Matte'$ 0'指對應的'RewriteRule'的整個模式的匹配字符串。 – Gumbo 2013-01-07 18:21:39