2012-06-20 55 views
1

我正在開發一個應用程序在PHP中,我需要設置一個相當廣泛的.htaccess重定向。我做了一些閱讀並嘗試自己編寫RewriteConds,但它比我的薪酬級別高一點 - 我希望有更多經驗的人可以提供幫助。這是我想要實現的:htaccess - 重定向子目錄內的所有請求,除非請求的文件存在

  • 該應用程序包含在www.example.com/app/。不要在此目錄之上重定向任何內容。
  • 此目錄中存在一些需要訪問的文件。目前這些是/app/includes/*/app/sb_pages/*。這將在未來發生變化和擴展,所以我需要一個包含所有現有文件的優雅解決方案。沒有找到文件時,如果重定向在這些目錄中觸發,那麼很好 - 我所關心的是能夠在沒有重定向觸發的情況下訪問文件。
  • 所有其他請求應該重定向到/app/index.php,並在查詢字符串中傳遞尾隨URL。例如,對/app/path1/path2/的請求應該重定向到/app/index.php?path=path1/path2/
  • 重定向不應該是透明的。當用戶請求/app/path1/path2/時,我希望他們相信他們一直在那裏。他們不應該看到url更改爲/app/index.php?path=path1/path2/

只是爲了更加清楚,這裏有一個少數情況下闡述:

  • /app/includes/sidebar.php不應該重定向。
  • /app/includes/nothing.html不存在 - 重定向是好的
  • /app/path1/path2/應該重定向到/app/index.php?path=path1/path2/。用戶仍然應該看到他們當前的URL爲/app/path1/path2/

我希望我已經解釋清楚並預先排除了大部分問題。如果你需要澄清,請不要猶豫,問。先謝謝您的幫助!

回答

4

嘗試在你的文檔根目錄添加以下內容到.htaccess文件:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^app/(.*)$ /app/index.php?path=$1 [L,QSA] 

需要注意的是,如果你想訪問現有目錄(而不是文件)也不會被重定向,添加RewriteCond %{REQUEST_FILENAME} !-d以上規則。

+0

這一定是我做錯了 - 我試圖編寫一個.htaccess放入/ app,而不是在根目錄下。像魅力一樣工作,謝謝! – CodeMoose

相關問題