Php 重写Url参数-更改http://myweb/?dept=dept&app=app tohttp://myweb/dept/app

Php 重写Url参数-更改http://myweb/?dept=dept&app=app tohttp://myweb/dept/app,php,apache,url-rewriting,Php,Apache,Url Rewriting,我目前有一个需要优化的web应用程序,我正在尝试实现的方法之一是: 从 我目前将此作为PHP代码: if(empty($_REQUEST['dept'])) { $folder = "apps/"; } else { $folder = str_replace("/", "", $_REQUEST['dept']) . "/"; } if(empty($_REQUEST['n'])) { include('user/home.php')

我目前有一个需要优化的web应用程序,我正在尝试实现的方法之一是:

我目前将此作为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 
但这只是重写了其中的一部分

谢谢

这应该可以:

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
$parts = explode('/', $_SERVER['PATH_INFO']);
$dept = isset($parts[0]) ? $parts[0] : 'someDefault';
$app = isset($parts[1]) ? $parts[1] : 'anotherDefault';
PHP:

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

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

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

RewriteRule ^(.*)$ /index.php?q=$1
RewriteRule ^(.*)$ /index.php
在第一种情况下,您将在$\u get[“q”]中获得查询字符串。
在第二种情况下,您必须从$\u请求或其他内容获取查询字符串。(只需做一些var_转储,直到找到所需内容即可)。
然后你爆炸(“/”)这个,你就都准备好了

看看是怎么做的

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


我不知道,但我为你平衡了:)