我有CakePHP简单程序(CakePHP:版本2.1.3,Centos 6.x和Apache:2.2.15)。
现在我要更改网址:http://domain.com/frontend/login
到新的网址:http://domain.com/user-login.html
我想使用新网址,并删除旧网址。
我试图重写(通过使用mod重写的配置.htaccess,我已经确认了/etc/httpd/conf/httpd.conf:将AllowOverride None更改为AllowOverride All)。
和一些.htaccess文件如下:
/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>
和/root/app/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 :(得分:1)
您不应该使用.htaccess
执行此操作。如果你这样做,CakePHP将无法理解请求。
相反,您需要将路由连接到CakePHP本身的控制器。实际上,您正在为相关控制器方法创建别名 URI。路由文档可在此处获取:
http://book.cakephp.org/2.0/en/development/routing.html
基本上,您需要打开app/Config/routes.php
,然后输入以下内容:
Router::connect(
'/user-login.html',
array('controller' => 'frontend', 'action' => 'login')
);
(假设您的控制器名为frontend
。)
如果这不起作用,那么您可能需要告诉CakePHP首先解析并删除扩展名:
Router::parseExtensions('html');
然后这样路线:
Router::connect(
'/user-login',
array('controller' => 'frontend', 'action' => 'login')
);
注意:我没有测试过这个。以上内容仅基于文档中描述的内容。
更新:从旧URI重定向
现在应用程序了解您要使用的路由,您可以在第一个.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
。)