【问题标题】:cakephp rewrite url not workingcakephp重写网址不起作用
【发布时间】:2015-09-10 01:12:59
【问题描述】:

我有 CakePHP 简单程序(CakePHP:版本 2.1.3、Centos 6.x 和 Apache:2.2.15)。

现在我想更改网址:http://domain.com/frontend/login

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

我想使用新网址,并删除旧网址。

我尝试重写(通过配置 .htaccess 和 mod rewrite,我已经配置了 /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 不起作用。

我的配置有什么问题吗?

【问题讨论】:

  • 在您的网络服务器配置或应用程序中添加一些错误日志记录,并在您说您的 URL 不起作用时帮助澄清您的意思。

标签: php .htaccess cakephp mod-rewrite cakephp-2.1


【解决方案1】:

您不应该对.htaccess 执行此操作。如果这样做,CakePHP 将无法理解该请求。

相反,您需要将路由连接到 CakePHP 本身的控制器。实质上,您正在为相关的控制器方法创建一个 alias 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。)

【讨论】:

  • 我知道,但是使用此解决方案,旧 URL 仍然有效,我可以访问旧 URL。我想删除旧网址,并且只适用于新网址。
猜你喜欢
  • 1970-01-01
  • 2017-07-10
  • 2013-09-22
  • 1970-01-01
  • 2013-10-07
  • 2013-09-16
  • 2014-11-15
  • 2016-01-09
相关资源
最近更新 更多