【问题标题】:How do I write a custom mod_rewrite .htaccess file for CakePHP routing?如何为 CakePHP 路由编写自定义 mod_rewrite .htaccess 文件?
【发布时间】:2009-03-01 08:20:26
【问题描述】:

我已经使用 CakePHP 重写了我的 Web 应用程序,但现在我需要将旧格式的 url 重定向到我的新 url 格式。我似乎无法添加自己的自定义 mod 重写规则。我已将它添加到主 cakephp 重写规则之上,但我得到了一个无限重定向循环。我只想在 cakephp 重写发生之前将http://mysite.com/index.php?action=showstream&nickname=user 重定向到http://mysite.com/user

编辑:好的,所以现在当满足条件时,它正在重定向,但它会将原始查询字符串附加到末尾。我假设这是由于 CakePHP 重写规则中的 QSA 标志,但我的印象是我的规则中的“L”会阻止它执行......

RewriteEngine On

RewriteCond %{QUERY_STRING} ^action\=showstream&nickname\=(.*)$
RewriteRule ^.*$ http://mysite.com/%1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

【问题讨论】:

  • 我已经更新了我原来的帖子。任何帮助将不胜感激!
  • 向替换中添加一个空查询,如我的示例所示。

标签: mod-rewrite cakephp


【解决方案1】:

当您在 RewriteCond 行而不是 RewriteRule 内进行捕获时,您必须使用 %N 而不是 $N 来引用捕获。也就是说,您的 RewriteRule 行应该是:

RewriteRule ^index.php$ /%1 [R=301,L]

【讨论】:

    【解决方案2】:

    尝试测试请求行 (THE_REQUEST) 以查看最初请求的 URI:

    RewriteCond %{THE_REQUEST} ^[A-Z]+\ /index\.php
    RewriteCond %{QUERY_STRING} ^action=showstream&nickname=([^&]*)$
    RewriteRule ^index\.php$ /%1? [R=301,L]
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule .* index.php?url=$0 [QSA,L]
    

    但也许用 PHP 来做这件事会更容易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      • 1970-01-01
      • 2014-04-26
      • 2011-06-29
      • 1970-01-01
      相关资源
      最近更新 更多