mod_rewrite для добавления конечных слешей в проекты Symfony - PullRequest
1 голос
/ 12 января 2012

В настоящее время все URL в моем routing.yml установлены как

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

В настоящее время пользователи могут получить доступ к действию foo / index, перейдя на example.com/foo/. Я хотел бы добавить правило перезаписи, чтобы example.com/foo указывало на одну и ту же страницу.

Правило перезаписи, которое у меня сейчас есть:

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

похоже не имеет никакого эффекта.

Ответы [ 2 ]

1 голос
/ 13 января 2012

Попробуйте:

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

Используемое вами регулярное выражение ^(.*)/$ сопоставляет запросы, которые end с косой чертой, поэтому example.com/foo не будет соответствовать этому.

0 голосов
/ 25 января 2012

Я предпочитаю «собственный проект» решения «конечных слешей» в 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
...
...