Дефисы в URL с помощью Kohana PHP Framework - PullRequest
0 голосов
/ 18 апреля 2011

Это вопрос Apache .htaccess.

В Kohana PHP Framework (я на 3.1) не похоже, что они поддерживают дефисы в URL для контроллера или действия, которые являются первыми 2 параметрами URL после домена, как в:

http://example.com/controller/action

OR

http://example.com/blogs/edit-article

Есть ли способ сделать файл .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]

1 Ответ

2 голосов
/ 19 апреля 2011

В файле Boorap.php Kohana 3.1 для моего проекта мне пришлось добавить это выше маршрута по умолчанию:

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
        );
    }
);

Это позволяет мне делать следующие вещи:

  • Тире в действии становится функцией в классе контроллера с подчеркиванием.Таким образом, «add-new» становится «action_add_new ()».
  • Тире в контроллере становится подпапкой, потому что контроллер, естественно, в kohana подчеркивает подпапку.Итак, из-за функции str_replace (), указанной выше на контроллере, если у меня есть контроллер 'test1-test2', Кохана ищет папку контроллера 'test1', а затем файл контроллера 'test2.php'.Но подвох заключается в том, что ваш test2.php должен начинаться с того, что 'class Controller_Test1_Test2 extends Controller {'.
  • И затем я также могу передать 3 оптимизированных для SEO параметра после URL, не используяболее уродливый? p1 = бла & p2 = бла & p3 = метод бла запроса параметров.Это объяснено больше здесь .
...