mod_rewrite用于向symfony项目添加尾部斜杠

时间:2012-01-12 18:06:30

标签: mod-rewrite symfony-1.4

目前,routing.yml中的所有网址都设置为

fooRoute:
url: /foo/
params: { module:foo, action: index}

目前,用户可以通过转到example.com/foo/来访问foo / index操作。我想添加一个重写规则,以便example.com/foo指向同一页面。

我目前的重写规则:

   RewriteEngine On
   RewriteRule ^(.*)/$ /$1/ [R=301,L]

似乎没有任何效果。

2 个答案:

答案 0 :(得分:1)

尝试:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/.+/$
RewriteRule ^(.*)$ /$1/ [R=301,L]

您正在使用的正则表达式^(.*)/$使用斜杠匹配结束的请求,因此example.com/foo将与之匹配。

答案 1 :(得分:0)

我更喜欢symfony 1.4中“尾部斜线”的“内部项目”解决方案:

// project_root/lib/routing/MyProjectNamePatternRouting.class.php:
/**
 * fixes URL trailing slashes
 */
class MyProjectNamePatternRouting extends sfPatternRouting
{
    /**
     * @see sfPatternRouting
     */
    public function parse($url) {
        $url = rtrim($url, '/'); # trim trailing slashes before actual routing
        return parent::parse($url);
    }
}


// apps/frontend/config/factories.yml:
all:
...
  routing:
    class: MyProjectNamePatternRouting
    param:
      generate_shortest_url:            true
      extra_parameters_as_query_string: true
...