好的,我在重寫.htaccess文件中的規則時感到厭煩!對靜態文件進行URL重寫檢查,然後重寫爲index.php
我期望的場景(使用URL http://doma.in/
作爲例子):
- 首先檢查以查看是否有
index.html
文件中的/public
子目錄是否存在;如果是這樣的話,可以提供服務- 如果沒有,發球(重寫)
index.php
- 如果沒有,發球(重寫)
要在我的例子擴大,說我們請求的URL http://doma.in/js/foobar.js
:
- 首先檢查,看是否
foobar.js
文件中的/public/js
次目錄的存在;如果是這樣的話,可以提供服務- 如果沒有,發球(重寫)
index.php?controller=js%2Ffoobar.js
- 如果沒有,發球(重寫)
將涵蓋靜態文件,但我還需要網址,像http://doma.in/foo
:
- 首先檢查,看是否
foo
文件中的/public
次目錄的存在;如果是這樣的話,可以提供服務- 如果沒有,發球(重寫)
index.php?controller=foo
- 如果沒有,發球(重寫)
和URL http://doma.in/foo/bar
:
- 我們可以假設
foo/bar
不存在於/public
子目錄的文件不能被命名爲喜歡該文件。- 所以服務(重寫)
index.php?controller=foo&action=bar
- 所以服務(重寫)
我敢肯定,如果這個複雜的(對我來說)位被蓋住,那麼我可以工作的查詢串入的場合太多;所以http://doma.in/foo/bar/foo/bar
將服務index.php?controller=foo&action=bar&querystring=foo%2Fbar
。
我也想確保一個斜線的處理一樣,如果尾隨斜線省略,例如:http://doma.in/foo/bar/foo/bar
和http://doma.in/foo/bar/foo/bar/
我會從我的應用程序內處理404,就好像文件不存在,它會重定向到index.php
這確實存在 - 我很高興與此,除非你有更好的解決方案:)
我真的希望這一切都有道理,因爲我一直在尋找解決方案到現在這一整天,這是我所有的:
Options +FollowSymLinks
RewriteEngine on
RewriteBase/
#RewriteBase /prompt-v3/
#RewriteCond %{REQUEST_URI} ^/prompt-v3/(.*)$
RewriteCond $1 !^public
RewriteRule ^(.*)$ public/$1 [R]
註釋掉的行在遠程主機上處理子目錄。到目前爲止,我可以重定向到/public
子目錄,如果該文件存在那就是它。
謝謝大家的幫助!