我正在嘗試爲開發測試設置一個動態的應用程序服務框架。Apache或PHP重定向到奇怪的URL
我想要的結果是,當用戶進入到一個URL,如果它的格式如下hostname.com/somecategory/someapplicationname/
或hostname.com/somecategory/someapplicationname
(結尾沒有斜槓),它應該服務於用戶的請求的應用程序從數據庫,只要類別和應用程序名稱作爲關鍵字存在。
我有一個特殊情況,其中一些應用程序不在數據庫中,並且它們存在於具有相同URL的文件中,所以我們優先於任何數據庫記錄提供現有文件。
來自數據庫的動態內容的情況正常工作。只有在最後有斜線時,現有文件的情況才能工作100%。如果斜槓不在那裏,它會提供正確的文件,但是URL看起來很奇怪。它會顯示:hostname.com/somecategory/someapplicationname/?category=somecategory&appname=someapplicationname
所以,它的工作原理,但意想不到的輸出使我覺得解決方案不完整。
我使用Apache mod_rewrite的,我的.htaccess文件如下:
RewriteEngine on
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ route.php?category=$1&appname=$2 [NC,L]
具體到本案的PHP代碼如下。爲了簡化閱讀,我從這段代碼剝離了驗證和數據庫連接,但保留了這種特殊情況的邏輯。
$file = $_SERVER['DOCUMENT_ROOT'] . $_GET['category'] . "/" . $_GET['appname'] . "/index.php";
$fileNoPHP = $_SERVER['DOCUMENT_ROOT'] . $_GET['category'] . "/" . $_GET['appname'] . "/index.html";
$_fileExists = file_exists($file);
$_fileNoPHPExists = file_exists($fileNoPHP);
include_once($_fileExists ? $file : $fileNoPHP);
需要明確的是,我的問題是:爲什麼我的現有文件的情況下追加GET URL參數的結束,只有當在最後的斜線,不是嗎?
謝謝你的時間。如果您需要更多信息,請告訴我,我會提供。
是否使用'RewriteRule ^([A-Za-z0-9 - ] +)/([A-Za-z0-9 - ] +)(/)?$ route.php?...'工作? – 2012-08-05 05:29:50
謝謝你的迴應。我仍然使用RewriteRule獲得相同的效果。 – invalidsyntax 2012-08-05 05:32:52
我不擅長正則表達式,但我試圖做的是使斜線可選。所以,我想,試驗和錯誤。這是否:'RewriteRule ^([A-Za-z0-9 - ] +)/([A-Za-z0-9 - ] +)(/ |)?$ route.php?...'或者: 'RewriteRule ^([A-Za-z0-9 - ] +)/([A-Za-z0-9 - ] +)(/?)?$ route.php?...'工作? – 2012-08-05 05:36:26