2015-06-24 109 views
1

我有CakePHP简单程序(CakePHP:版本2.1.3,Centos 6.x和Apache:2.2.15)。cakephp重写url不起作用

现在我想改变URL从:http://domain.com/frontend/login

新的网址,如:http://domain.com/user-login.html

我想用新的URL,并删除旧的URL。

我尝试重写(通过配置.htaccess与mod重写,我已经配置/etc/httpd/conf/httpd.conf:更改AllowOverride None to 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> 

和/根/应用程序/根目录/ .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

添加一些错误记录到你的web服务器配置或应用程序,并帮助澄清你是什么意思时,你说你的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') 
); 

注:我没有测试过这一点。以上只是基于文档中描述的内容。


更新:从旧的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)); 

(为了使该重定向永久和浏览器和搜索引擎的缓存,改变302301

+0

我知道了,但有了这个解决方案,旧的URL仍然有效,并且我有能力访问旧的URL。我想删除旧网址,并且只能使用新网址提供。 – MartinJoo

+0

请参阅我的更新。 –