I have the CakePHP simple program ( CakePHP: version 2.1.3, Centos 6.x and Apache: 2.2.15).
Now I want to change url from: http://domain.com/frontend/login
to new url like: http://domain.com/user-login.html
I want to use new URL, and remove old URL.
I tried to rewrite ( by config .htaccess with mod rewrite, I configed /etc/httpd/conf/httpd.conf already: Change AllowOverride None to AllowOverride All).
and some .htaccess files like 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>
and /root/app/webroot/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
But my new url http://domain.com/user-login.html is not work.
There is any thing wrong in my config?
You should not be doing this with
.htaccess
. If you do, CakePHP will not understand the request.Instead, you need to connect a route to a controller in CakePHP itself. In essence, you are creating an alias URI for the controller method in question. The documentation for routing is available here:
http://book.cakephp.org/2.0/en/development/routing.html
Essentially, you need to open up
app/Config/routes.php
, and enter the following:(Assuming your controller is called
frontend
.)If that does not work, then you may need to tell CakePHP to parse and strip out the extension first:
And then route like this instead:
Note: I have not tested this. The above is simply based on what is described in the documentation.
Update: Redirect from old URIs
Now that the application understands the routes you want to use, you can create redirects in your first
.htaccess
file:Alternatively, you can use the
Router::redirect()
in your route configuration:(To make that redirect permanent and cached by browsers and search engines, change
302
to301
.)