重定向index.php,使用htaccess将all重定向到index.php
我正在編寫一個簡單的基于PHP的MVC-ish框架.我希望這個框架能夠安裝在任何目錄中.
我的PHP腳本抓取請求uri并將其分解為段.它使段1成為控制器,段2成為行動.當我這樣做時,這一切都很好:
它將轉到特定的模塊控制器和方法.現在我有一個默認控制器,即家庭控制器,它位于文件夾主頁中.
我想將每個文件夾和php文件重定向回index.php,保留其他所有內容.
我遇到的第一個問題是它永遠不會重定向到正確的文件夾,總是重定向到域根文件夾.
這是我試過的:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]
解決方法:
你的重寫規則看起來幾乎沒問題.
首先確保您的.htaccess文件位于文檔根目錄(與index.php相同的位置),否則它只會影響它所在的??子文件夾(以及其中的任何子文件夾 – 遞歸).
接下來對您的規則稍作修改,使其看起來像:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$/index.php?path=$1 [NC,L,QSA]
目前你只是匹配.這是任何字符的一個實例,至少需要.*來匹配任何字符的任意數量的實例.
$_GET [‘path’]變量將包含偽目錄結構,例如/ mvc / module / test,然后您可以在index.php中使用它來確定您想要執行的Controller和操作.
如果你想將整個shebang安裝在一個子目錄中,比如/ mvc /或/ framework /,那么最簡單的方法是稍微改變重寫規則以將其考慮在內.
RewriteRule ^(.*)$/mvc/index.php?path=$1 [NC,L,QSA]
并確保index.php位于該文件夾中,而.htaccess文件位于文檔根目錄中.
$_GET [‘path’]的替代品(18年2月更新和19年1月更新)
實際上并不需要(現在甚至不常見)將路徑設置為$_GET變量,許多框架將依賴$_SERVER [‘REQUEST_URI’]來檢索相同的信息 – 通常用于確定使用哪個Controller – 但原則是完全相同的.
這確實簡化了RewriteRule,因為您不需要創建path參數(這意味著OP的原始RewriteRule現在可以工作):
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$/index.php [L,QSA]
但是,關于在子??目錄中安裝的規則仍然適用,例如,
RewriteRule ^.*$/mvc/index.php [L,QSA]
旗幟:
NC =無大小寫(不區分大小寫,因為模式中沒有字符,所以不是必需的)
L = Last(在重寫之后它會停止重寫,所以請確保它是重寫列表中的最后一個)
QSA =查詢字符串附加,以防你有類似的東西?喜歡=你想要保留的penguins并傳遞給index.php.
標簽:htaccess,php
來源: https://codeday.me/bug/20190911/1804309.html
總結
以上是生活随笔為你收集整理的重定向index.php,使用htaccess将all重定向到index.php的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 后台配置系统,使用 larave
- 下一篇: 小程序支持php版本是多少,小程序体验版