2011-08-30 100 views
1

目前我的根Web目錄具有重定向到我的應用程序文件夾像這樣的.htaccess:URL重寫只有目錄

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteRule ^$ app/ [L] 
    RewriteRule (.*) app/$1 [L] 
</IfModule> 

而且/ app目錄裏面我有一個具有以下另一個的.htaccess:

<IfModule mod_rewrite.c> 
RewriteEngine On 

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

RewriteRule ^(.*)$ index.php?url=$1 [PT,L] 

</IfModule> 

此時,回到我的PHP中,我可以使用$ _GET ['url']來獲取請求的URL。這很好,很好。但是,我期望做的只是重寫,如果請求的url是一個目錄,並且如果請求的url是一個文件,它將實際重定向到該文件以供查看。我不確定這是否可以純粹通過.htaccess完成,或者如果在php中執行is_file檢查,然後將頭部重定向到文件?

現在,如果我做一個 is_file檢查,並做了頭重定向,我得到安置在一個循環中,因爲在根目錄htaccess的顯然想重定向到/ app目錄

什麼是最好的該怎麼辦?

+0

1)什麼URL會給你帶來麻煩? 2)那個文件夾**物理位置**(位於'app'文件夾內或外部 - 例如內部網站根目錄)? – LazyOne

+0

如果我嘗試去testdomain.com/test.php,它只會將我重定向到應用程序文件夾內部,到那裏的索引處。 – grep

+0

對不起 - 但我不明白你在這裏有什麼問題。您的標題顯示「Url只重寫目錄」..但是您提供的是一個PHP文件的URL ...您能否更清楚地闡述您的問題 - 1)一般需要做什麼,2)它的工作原理是否正確現在(根據我的理解,顯然是錯的)和3)它應該如何工作。 – LazyOne

回答

2

我還沒有100%清楚究竟需要什麼,希望這是你問的。如果沒有 - 讓我知道。

再添加一個規則到網站根目錄的.htaccess告知Apache的忽略現有的文件:

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    # do not rewrite requests to existing files 
    RewriteCond %{REQUEST_FILENAME} -f 
    RewriteRule . - [L] 

    RewriteRule ^$ app/ [L] 
    RewriteRule (.+) app/$1 [L] 
</IfModule> 

顯然,如果被請求的文件(如example.com/test.php),但它不存在,重寫還是會發生。

+0

這已經在應用程序文件夾中的.htaccess中完成了,但它看起來像OP希望能夠在應用程序之外引用文件(如果它們存在),所以他的第二個htaccess中的規則是不好的;但是是的,這是怎麼做到的。 – dmp

+0

你懂了!謝謝 – grep