【问题标题】:Rewrite Url Parameters - Change http://myweb/?dept=dept&app=app to http://myweb/dept/app重写 URL 参数 - 将 http://myweb/?dept=dept&app=app 更改为 http://myweb/dept/app
【发布时间】:2009-08-27 15:13:23
【问题描述】:

我目前有一个需要优化的 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 

但这只会重写部分内容。

谢谢

【问题讨论】:

    标签: php apache url-rewriting


    【解决方案1】:

    许多框架这样做的方式是使用以下规则之一:

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

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

    看看TYPO3eZPublishDrupal 是如何做到这一点的。

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

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

    【讨论】:

      【解决方案2】:

      这应该可行:

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

      【讨论】:

      • 我不知道,但我已经为你平衡了 :)
      猜你喜欢
      • 2022-11-04
      • 2021-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-16
      • 2020-08-31
      • 2016-12-29
      相关资源
      最近更新 更多