2009-08-27 36 views
2

我目前有一個需要優化的Web應用程序, 「M試圖實現是這樣的:重寫URL參數 - 將http:// myweb /?dept = dept&app = app更改爲http:// myweb/dept/app

http://myweb/dept/app

http://myweb/?dept=dept&app=app

我目前已經以此作爲它的PHP代碼:

if(empty($_REQUEST['dept'])) {  
$folder = "apps/"; 
} else {  
$folder = str_replace("/", "", $_REQUEST['dept']) . "/"; }  
    if(empty($_REQUEST['n'])) {  
    include('user/home.php'); 
    } else {  
      $app = $_REQUEST['n']; 
      if(file_exists($folder.$app.".php")) {   
      include($folder.$app.".php");  
      } else {     
      include("global/error/404.php");  
      } 
     } 

我該怎麼做?

我目前有一半用:

RewriteRule ^([A-Za-z]+)$ /index.php?app=$1 

但只有重寫它的一部分。

感謝

回答

2

的方式很多框架做,這是與以下規則之一:

RewriteRule ^(.*)$ /index.php?q=$1 
RewriteRule ^(.*)$ /index.php 

在第一種情況你得到這個問題ry字符串在$ _GET [「q」]中。
在第二種情況下,您必須從$ _REQUEST或其他東西獲取查詢字符串。 (只需做一些var_dumps直到你找到你需要的)。
然後你爆炸(「/」)這個,你就全部設置好了。

看看如何TYPO3,eZPublish,Drupal做到這一點。

您還應該添加以下條件以允許網站打開您的靜態文件(如images/css/js/etc)。如果URL指向一個與文件directoy或符號鏈接匹配的位置,它們會告訴apache不要進行重寫。 (您必須在RewriteRule指令之前執行此操作)

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-l 
0

這應該工作:

RewriteRule ^([A-Za-z]+)/([A-Za-z]+)$ index.php?dept=$1&app=$2 [QSA] 

您需要QSA一部分,以便對任何GET參數附加到重寫URL。

您可能會發現,將所有內容重寫爲index.php可能會更靈活,然後在其中處理拆分網址,例如,

的.htaccess:

#only rewrite paths that don't exist 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^(.*)$ index.php/$1 

PHP:

<?php 
$parts = explode('/', $_SERVER['PATH_INFO']); 
$dept = isset($parts[0]) ? $parts[0] : 'someDefault'; 
$app = isset($parts[1]) ? $parts[1] : 'anotherDefault'; 
+0

爲什麼我低調? – 2009-08-27 15:32:45

+0

我不知道,但我平衡了你:) – bear 2009-08-27 15:43:34

相關問題