讓我先說我是相當新的.htaccess創作,並通常留給我的託管服務提供商。我最近決定在php中實現一個手動MVC框架,並使用.htaccess文件來使用「seo」友好的url進行重定向。我的MVC實現使用變量模塊,類,事件和參數。它們按照該順序在URL中指定,例如http://mydomain.com/module/class/event/parameter。如果你砍掉了url的任何部分,我希望它能夠工作。這一切都工作正常,直到我把我的網站上移一層,然後複製我的.htaccess文件。現在我得到一個無限重定向循環,其中一個規則是,在我移動它之前,它工作正常。幫助無限重定向從使用MVC與PHP的.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¶meter=$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的路由器。這樣你有一套更簡單的規則,然後你可以讓php根據你提供的規範來分類變異位置。你可以對你自己的,或者你可以使用Zend框架組件(儘管你可能需要切換到他們的前端控制器或至少適應你的界面)。 – prodigitalson
你好,你有沒有考慮在http://serverfault.com/問? – Herr
@prodigitalson不在子目錄中重複規則。我有一個名爲public的子目錄,我的框架先前已經在使用。如果沒有在url上指定目錄,我的頂級目錄有一條規則,只是重定向到公共目錄。就像我說的,在我把網站升級之前,所有這些工作都很順利。我將看看php路由器解決方案。 – SRM