Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Kohana PHP框架的URL中的连字符_Php_.htaccess_Frameworks_Apache2_Kohana - Fatal编程技术网

使用Kohana PHP框架的URL中的连字符

使用Kohana PHP框架的URL中的连字符,php,.htaccess,frameworks,apache2,kohana,Php,.htaccess,Frameworks,Apache2,Kohana,这是一个Apache.htaccess问题 在Kohana PHP Framework中(我使用的是3.1),它们似乎不支持控制器或操作的URL中的连字符,这是域后的前2个URL参数,如: 或 是否有一种方法可以生成.htaccess文件,以便可以从控制器和操作插槽中去掉连字符(破折号),但不能从其他插槽中去掉?这是我当前的.htaccess文件: Options All +FollowSymLinks -Indexes -Multiviews # Turn on URL rewritin

这是一个Apache.htaccess问题

在Kohana PHP Framework中(我使用的是3.1),它们似乎不支持控制器或操作的URL中的连字符,这是域后的前2个URL参数,如:

是否有一种方法可以生成.htaccess文件,以便可以从控制器和操作插槽中去掉连字符(破折号),但不能从其他插槽中去掉?这是我当前的.htaccess文件:

Options All +FollowSymLinks -Indexes -Multiviews

# Turn on URL rewriting
RewriteEngine On

# Installation directory
RewriteBase /

# Protect hidden files from being viewed
<Files .*>
    Order Deny,Allow
    Deny From All
</Files>

RewriteRule ^assets/(.*)$   application/views/assets/$1

RewriteCond %{REQUEST_FILENAME} !/application/views/assets/.*

# Protect application and system files from being viewed
RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]
Options All+FollowSymLinks-索引-多视图
#启用URL重写
重新启动发动机
#安装目录
重写基/
#保护隐藏文件不被查看
命令拒绝,允许
全盘否定
重写规则^assets/(.*)$application/views/assets/$1
重写cond%{REQUEST_FILENAME}/应用程序/视图/资产/*
#保护应用程序和系统文件不被查看
重写规则^(?:应用程序|模块|系统)\b.*index.php/$0[L]
#允许直接显示现有的任何文件或目录
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
#将所有其他URL重写为index.php/URL
重写规则。*index.php/$0[PT]

在我的项目的Kohana 3.1的boostrap.php中,我必须在默认路径上方添加以下内容:

Route::set(
    'custom',
    function($uri) {
        $uri = rtrim($uri, '/');
        $asParts = @ explode('/',$uri);
        $controller = @ $asParts[0];
        $action = @ $asParts[1];
        $param1 = @ $asParts[2];
        $param2 = @ $asParts[3];
        $param3 = @ $asParts[4];
        $controller = str_replace('-','_',$controller);
        $action = str_replace('-','_',$action);
        $controller = (empty($controller)) ? 'home' : $controller;
        $action = (empty($action)) ? 'index' : $action;
        return array(
            'controller' => $controller,
            'action' => $action,
            'param1' => $param1,
            'param2' => $param2,
            'param3' => $param3
        );
    }
);
这让我可以做以下事情:

  • 动作中的破折号将成为控制器类中带有下划线的函数。因此,“addnew”变成了“action_add_new()”
  • 控制器中的破折号变为子文件夹,因为控制器在kohana中自然下划线表示子文件夹。因此,由于上面控制器上的str_replace()函数,如果我有一个“test1-test2”控制器,Kohana会查找控制器文件夹“test1”,然后查找控制器文件“test2.php”。但关键是,test2.php需要以“类控制器\u Test1\u test2扩展控制器{”开头
  • 然后,我还能够在URL之后传递3个SEO友好参数,而不必使用更难看的?p1=blah&p2=blah&p3=blah查询参数技术。这是
另请参见