重写网址参数 - 将http:// myweb /?dept = dept& app = app更改为http:// myweb / dept / app

时间:2009-08-27 15:13:23

标签: php apache url-rewriting

我目前有一个我需要优化的Web应用程序,我想要实现的方法之一是:

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 个答案:

答案 0 :(得分:2)

许多框架执行此操作的方式是使用以下规则之一:

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

在第一种情况下,您将获得$ _GET [“q”]中的查询字符串 在第二种情况下,您必须从$ _REQUEST或其他东西获取查询字符串。 (只需要做一些var_dump,直到找到你需要的东西) 然后你爆炸(“/”)这个你就完全了。

了解TYPO3eZPublishDrupal如何做到这一点。

您还应添加以下条件以允许站点打开静态文件(如images / css / js / etc)。如果URL指向实际匹配文件,directoy或符号链接的位置,它们会告诉apache不进行重写。 (您必须在RewriteRule指令之前执行此操作)

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

答案 1 :(得分: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';