簡體   English   中英

使用帶有PHP的MVC從.htaccess幫助無限重定向

[英]Help With Infinite Redirect From .htaccess using MVC with PHP

讓我先說一下我對.htaccess創作相當新,並且通常會將我的細節留給我的托管服務提供商。 我最近決定在php中實現一個手動MVC框架,並使用.htaccess文件重定向使用“seo”友好網址。 我的MVC實現使用變量模塊,類,事件和參數。 它們按順序在URL中指定,例如http://mydomain.com/module/class/event/parameter 如果你砍掉網址的任何部分,我希望它能夠工作。 這一切都正常,直到我將我的網站上移一級並隨后復制我的.htaccess文件。 現在我得到一個無限重定向循環,其中一個規則在我移動之前工作正常

這是我的.htaccess文件:

Options +FollowSymLinks 
RewriteEngine On 

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^$ /index.php?module=default&class=home [QSA,L]

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)$ /index.php?module=$1 [QSA,L]

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ \
    /index.php?module=$1&class=$2&event=$3 [QSA,L]

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)$ \
    /index.php?module=$1&class=$2&event=$3&parameter=$4 [QSA,L]

現在,如果我拿出以下部分:

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)$ /index.php?module=$1 [QSA,L]

它很棒。 問題是,如果我把它排除在外,某人鍵入http://mydomain.com/module我會得到一個404(因為該目錄不存在且沒有任何規則匹配)。 那么為什么這個規則現在不起作用,為什么當index.php(和這個.htaccess文件)在子目錄中時它可以工作呢?

好吧,看起來php路由器解決方案是最好的。 感謝@prodigitalson的提升。

這是我現在使用的簡化.htaccess

RewriteEngine On

# Disable rewriting for existing files or directories
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# redirect all other requests to index.php
RewriteRule ^.*$ index.php [PT,L]

RewriteRule ^$ index.php [PT,L]

而這個“神奇”的代碼行完成了.htaccess之前所做的所有繁重工作:

$url = explode('/', trim($_SERVER['REQUEST_URI'], '/'));

現在我可以從$ url數組中分配我的模塊,類,事件和參數值。 它還解決了我遇到的問題,我可能需要一個以上的事件參數。 我不想繼續為每個級別的.htaccess文件添加規則。 現在我可以提供任意數量的參數並在代碼中處理路由邏輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM