我目前有一个我需要优化的Web应用程序,我想要实现的方法之一是:
这
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
但只会重写部分内容。
由于
答案 0 :(得分:2)
许多框架执行此操作的方式是使用以下规则之一:
RewriteRule ^(.*)$ /index.php?q=$1
RewriteRule ^(.*)$ /index.php
在第一种情况下,您将获得$ _GET [“q”]中的查询字符串 在第二种情况下,您必须从$ _REQUEST或其他东西获取查询字符串。 (只需要做一些var_dump,直到找到你需要的东西) 然后你爆炸(“/”)这个你就完全了。
了解TYPO3,eZPublish,Drupal如何做到这一点。
您还应添加以下条件以允许站点打开静态文件(如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';