Переписать параметры URL - измените http://myweb/?dept=dept&app=app на http://myweb/dept/app - PullRequest
2 голосов
/ 27 августа 2009

В настоящее время у меня есть веб-приложение, которое мне нужно оптимизировать, и один из методов или чего-то, чего я пытаюсь достичь, такой:

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 ]

2 голосов
/ 27 августа 2009

Многие фреймворки делают это по одному из следующих правил:

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

В первом случае вы получите строку запроса в $ _GET ["q"].
Во втором случае вы должны получить строку запроса из $ _REQUEST или что-то еще. (просто сделайте несколько var_dumps, пока не найдете то, что вам нужно).
Затем вы взорветесь ("/") и все готово.

Посмотрите, как это сделать TYPO3 , eZPublish , Drupal .

Вы также должны добавить следующие условия, чтобы сайт мог открывать ваши статические файлы (например, images / css / js / etc). Они говорят apache не делать перезапись, если URL указывает на местоположение, которое фактически соответствует файлу, директой или символической ссылке. (Вы должны сделать это до директивы RewriteRule)

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
0 голосов
/ 27 августа 2009

Это должно работать:

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

Вам нужна часть QSA для добавления любых параметров GET к переписанному URL.

Вы можете обнаружить, что может быть более гибким переписать все в index.php, а затем обработать разделение URL, например,

.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';
...