CakePHP удалить «? Url =» из URL после перенаправления - PullRequest
0 голосов
/ 21 июля 2011

Я использую CakePHP для своего PHP-приложения.

По умолчанию он помещает это в файл .htaccess:

RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

После этого правила я делаю это:

RedirectMatch ^/resources(.*)$ http://domain.com/community$1 [QSA,R=permanent,L]

Это делает перенаправленный URL:

http://domain.com/community/view/171/?url=resources/view/171/

Как мне избавиться от добавленного "? URL =", не нарушая маршрутизацию cakephp?

1 Ответ

1 голос
/ 21 июля 2011

Если я правильно понимаю ваш вопрос, вы хотите, чтобы запросы на /community/* были направлены на ResourcesController. Вы должны быть в состоянии достичь этого, добавив следующее к вашему app/config/routes.php.

/**
 * Rename /resources/* to /community/*
 */
Router::connect('/community', array('controller' => 'resources'));
Router::connect('/community/:action/*', array('controller' => 'resources'));

Второе правило выполняет большую часть магии, сопоставляя соответствующие запросы с ResourcesController и передавая также действие.

При вышеуказанном подходе вы также можете воспользоваться преимуществами обратной маршрутизации:

echo $this->Html->link('View community', array(
    'controller' => 'resources',
    'action' => 'view',
    $id
));
// outputs a link to `/community/view/171`

Первое правило просто заключается в том, чтобы исключить имя действия из корневого URL-адреса (т. Е. Ссылки HtmlHelper с обратной маршрутизацией становятся /community вместо /community/index).


После комментария LazyOne, если вы также хотите перенаправить старые ссылки в стиле /resources* для целей SEO, вам нужно выполнить следующее:

# app/webroot/.htaccess
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^/resources(.*)$ /community$1 [R=301,L] # permanent redirect
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...