2015-06-24 5 views
1

У меня есть простая программа CakePHP (CakePHP: версия 2.1.3, Centos 6.x и Apache: 2.2.15).cakephp rewrite url not working

Теперь я хочу изменить URL из: http://domain.com/frontend/login

на новый адрес, как: http://domain.com/user-login.html

Я хочу использовать новый URL-адрес, и удалить старый URL.

Я попытался переписать (по конфигурации .htaccess с mod rewrite, я уже сконфигурировал /etc/httpd/conf/httpd.conf: Изменить AllowOverride None to AllowOverride All).

и некоторые файлы .htaccess как Belows:

/root/.htaccess

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteRule ^$ app/webroot/ [L] 
    RewriteRule (.*) app/webroot/$1 [L] 
    #rewrite to new url 
    RewriteRule ^frontend/login$ user-login.html [L] 
</IfModule> 

/root/app/.htaccess

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteRule ^$ webroot/ [L] 
    RewriteRule (.*) webroot/$1 [L] 
</IfModule> 

и/корень/приложение/Webroot/.htaccess

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php [QSA,L] 
</IfModule> 

Но мой новый адрес http://domain.com/user-login.html не работа.

В моей конфигурации есть что-то не так?

+0

Добавьте протоколирования ошибок в конфигурации разорвать веб или приложения и помогают понять, что вы имеете в виду, когда вы говорите, что ваш URL ISN Не работаем. – davidjb

ответ

1

Вы не должны делать это с помощью .htaccess. Если вы это сделаете, CakePHP не поймет запрос.

Вместо этого вам необходимо подключить маршрут к контроллеру непосредственно в CakePHP. По существу, вы создаете псевдоним URI для рассматриваемого метода контроллера. Документация для маршрутизации доступна здесь:

http://book.cakephp.org/2.0/en/development/routing.html

По сути, вам нужно открыть app/Config/routes.php, и введите следующее: (. Если предположить, что контроллер называется frontend)

Router::connect(
    '/user-login.html', 
    array('controller' => 'frontend', 'action' => 'login') 
); 

Если это не сработает, вам может потребоваться сообщить CakePHP разобрать и вырезать расширение первой:

Router::parseExtensions('html'); 

, а затем маршрут, как это вместо:

Router::connect(
    '/user-login', 
    array('controller' => 'frontend', 'action' => 'login') 
); 

Примечание: Я не проверял это. Вышеуказанное просто основано на том, что описано в документации.


Обновление: Перенаправление из старых URIs

Теперь, когда приложение понимает маршруты, которые вы хотите использовать, вы можете создать редирект в первом .htaccess файле:

RewriteEngine On 
RewriteRule ^frontend/login$ /user-login.html [R=302,L] 
# ... etc ... 

В качестве альтернативы, вы можете использовать Router::redirect() в вашей конфигурации маршрута:

Router::redirect('/frontend/login', '/user-login.html', array('status' => 302)); 

(Для того, чтобы сделать что-перенаправление постоянного и кэшируются браузерами и поисковыми системами, изменить 302 к 301.)

+0

Я знал, но с этим решением старый URL-адрес по-прежнему активен, и у меня есть возможность доступа к старому URL-адресу. Я хочу удалить старый URL-адрес и получить доступ только с новым URL-адресом. – MartinJoo

+0

См. Мое обновление. –

 Смежные вопросы

  • Нет связанных вопросов^_^