【问题标题】:htaccess RewriteRule doesn't workhtaccess RewriteRule 不起作用
【发布时间】:2013-02-03 13:49:42
【问题描述】:

我正在使用 yii 框架并尝试使用 htaccess 文件重写 url 这是我的文件 (第一步我尝试使用一个简单的规则)

RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^carguide$  MainModel/index/304 [NC,L]

# otherwise forward it to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php


# otherwise forward it to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

我想将 url carguide 重写为 mainModel/index/304, 但没有米我试过yii收到原始网址并引发404错误。

这里是日志文件:

strip per-dir prefix: C:/xampp/htdocs/cars/carguide -> carguide
applying pattern '^carguide$' to uri 'carguide'
RewriteCond: input='C:/xampp/htdocs/cars/carguide' pattern='!-f' => matched
RewriteCond: input='C:/xampp/htdocs/cars/carguide' pattern='!-d' => matched
rewrite 'carguide' -> 'MainModel/index/304'
add per-dir prefix: MainModel/index/304 -> C:/xampp/htdocs/cars/MainModel/index/304
strip document_root prefix: C:/xampp/htdocs/cars/MainModel/index/304 -> /cars/MainModel/index/304
internal redirect with /cars/MainModel/index/304 [INTERNAL REDIRECT]
add path info postfix: C:/xampp/htdocs/cars/MainModel -> C:/xampp/htdocs/cars/MainModel/index/304
strip per-dir prefix: C:/xampp/htdocs/cars/MainModel/index/304 -> MainModel/index/304
applying pattern '^carguide1$' to uri 'MainModel/index/304'
add path info postfix: C:/xampp/htdocs/cars/MainModel -> C:/xampp/htdocs/cars/MainModel/index/304
strip per-dir prefix: C:/xampp/htdocs/cars/MainModel/index/304 -> MainModel/index/304
applying pattern '.' to uri 'MainModel/index/304'
RewriteCond: input='C:/xampp/htdocs/cars/MainModel' pattern='!-f' => matched
RewriteCond: input='C:/xampp/htdocs/cars/MainModel' pattern='!-d' => matched
rewrite 'MainModel/index/304' -> 'index.php'
add per-dir prefix: index.php -> C:/xampp/htdocs/cars/index.php
strip document_root prefix: C:/xampp/htdocs/cars/index.php -> /cars/index.php
internal redirect with /cars/index.php [INTERNAL REDIRECT]
strip per-dir prefix: C:/xampp/htdocs/cars/index.php -> index.php
applying pattern '^carguide$' to uri 'index.php'
strip per-dir prefix: C:/xampp/htdocs/cars/index.php -> index.php
applying pattern '.' to uri 'index.php'
RewriteCond: input='C:/xampp/htdocs/cars/index.php' pattern='!-f' => not-matched
pass through C:/xampp/htdocs/cars/index.php

我尝试更改标志,添加 RewiteBase。

【问题讨论】:

  • internal redirect with /cars/MainModel/index/304 [INTERNAL REDIRECT] 这似乎是问题所在,您发布的重写规则没有显示任何会导致此问题的内容,因此它在您的配置中的其他位置。

标签: .htaccess mod-rewrite yii


【解决方案1】:

据我所知,您不需要使用.htaccess 为您网站的每个页面创建特定的重写规则。使用建议的here 简单的.htaccess 就足够了,然后使用Yii 的URL manager 配置你的重写规则。

更新

如果您的控制器名称是 mainModel 并且您的操作名称是 index(对于 Yii 而言,路由是 mainModel/index)并且您希望此页面可以通过 http://yoursite/carguide 访问,那么您的 URL 管理器配置protected/config/main.php 可能如下所示:

'urlManager' => array(
    'urlFormat' => 'path',
    'showScriptName' => false,
    'rules' => array(
        'carguide' => 'mainModel/index',
    )
),

更新

Yii 的 URL 管理器类支持的配置属性请参考this page

【讨论】:

  • 嗨,感谢您的回复,我尝试添加将重定向此地址的规则。 MainModel 是我的控制器,索引是操作,但我收到 404 错误:
  • 您添加的具体规则是什么?我用适合我的示例更新了答案。
  • 抱歉,我错误地提交了回放 :) 非常感谢它有效 - 我添加了正确的规则。
猜你喜欢
  • 2012-12-10
  • 2012-12-30
  • 1970-01-01
  • 1970-01-01
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多