我在重写网址时遇到问题。我为自己编写了一个小框架,因为我不需要一个包含大量项目的全尺寸框架。我定义了像zend framework这样的一般行为:
重写网址:域/控制器/操作
真实路径:domain / index.php?ctrl = controller& act = action
应显示控制器和操作,而不是$ _GET命名键。在控制器和动作之后如果我添加了无限量的附加参数,它应该被添加为键/值,如下所示:
域/控制器/操作/键/值/键2 /值2 /键3 /值3 ...
这是我的.htaccess:
RewriteEngine On
RewriteBase /
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?ctrl=$1&act=$2&$3=$4&$5=$6&$7=$8&$9=$10&$11=$12&$13=$14 [L]
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?ctrl=$1&act=$2&$3=$4&$5=$6&$7=$8&$9=$10&$11=$12 [L]
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?ctrl=$1&act=$2&$3=$4&$5=$6&$7=$8&$9=$10 [L]
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?ctrl=$1&act=$2&$3=$4&$5=$6&$7=$8 [L]
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?ctrl=$1&act2=$2&$3=$4&$5=$6 [L]
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?ctrl=$1&act=$2&$3=$4 [L]
RewriteRule ^([\w-]+)+/([\w-]+)?$ index.php?ctrl=$1&act=$2 [L]
RewriteRule ^([\w-]+)+/?$ index.php?ctrl=$1 [L]
页面只能通过控制器和操作进行调用。如果其中一个丢失,将重定向用户。我为此设置了标题:
// Redirects
if (!isset($_GET) || !isset($_GET['ctrl'])) {
header('location: /index/index/');
}
if (!isset($_GET['act']) || (isset($_GET['act']) && empty($_GET['act']))) {
header("location: /".$_GET['ctrl']."/index/");
}
我知道这很脏。一般来说它有效,但有些问题我无法解决:
如果我尝试使用域名调用webapp /页面无法显示,或者我将通过搜索"域/"重定向到谷歌。如果我键入域/控制器/动作它可以工作。
如果我在操作后添加一个尾部斜杠,它最终会得到404.它应该是相同的行为,就像没有斜杠一样。
如果我在标题中的路径前添加斜杠('位置:...它适用于以下模式:域/控制器。它将被重定向到域/控制器/操作(在此案件管制员/指数)。
但是,如果我尝试域名/它会产生404。
之前没有斜线:
域/控制器/导致域/控制器/控制器/操作但域/将被正确重定向到域/索引/索引
我缺少什么? :(
由于
的Tyr
答案 0 :(得分:0)
我想你忘了这个:
rewritecond %{http_host} ^yoururl.com/ [nc]
rewriterule ^(.*)$ http://yoururl.com/$1 [r=301,nc]
此代码需要包含:
RewriteBase /