2009-05-12 4 views
1

Приложение Facebook размещено на моем сервере, скажем, http://server.com/projects/fbapp/, но его можно просмотреть только в Facebook на, например, http://apps.facebook.com/fbapp/.В CakePHP возможно ли иметь внутренние и внешние маршруты?

Использование CakePHP представляет проблему: должны ли маршруты иметь префикс «/ project/fbapp» или просто «fbapp»?

Это проблема, потому что маршруты используются не только для маршрутизации входящих запросов, но и для генерации ссылок (и действий формы и т. Д.).

Как ляп, у меня теперь есть две маршрутизации инструкции для каждого маршрута:

Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display')); 
Router::connect('projects/fbapp/pages/*', array('controller' => 'pages', 'action' => 'display')); 

с первым не требует префикса из строки я включил в Bootstrap.php:

Configure::write('App.base', '/fbapp'); 

Что происходит во время операций обратной маршрутизации.

Вопрос в том, есть ли более элегантный способ сделать это? Это кажется очень уродливым, и я уверен, что это не очень Cakey.

+1

Я знаю, что это отвратительный ответ, но как насчет запуска http://server.com:8080/fbapp/? – Justin

+0

Это перешло мне в голову! Я считаю, что это так же хорошо, как мое текущее решение. Я думаю, это академический, но мне бы очень понравилось элегантное решение. –

+2

Не будет ли (apache) переписать трафик с facebook самым изящным решением?На вашей внутренней машине нужно было бы иметь дело только с одним путем, и если бы вы захотели интегрировать приложение с другой службой/платформой на более позднюю дату, вам нужно было бы добавить только другое правило перезаписи, а не вмешиваться в это приложение. – jacobangel

ответ

1

Вам ничего не нужно делать! Cake позаботится о базовом URL-адресе для вас, поэтому вам не нужно дублировать маршруты и не заботиться о базовом URL-адресе. Что вам нужно сделать, это маршрут вашего родственника URL вместо использования projects/fbapp/, или любой префикс вы хотите обрабатывать:

Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display')); 

Вот как я обрабатывать все запросы в моем приложении, которое я раскрываю под http://www.example.com, в то время как на местном уровне I имейте это под http://localhost/workspace/example.com/trunk/deploy. Он работает как обаяние в обеих средах.

1

Крест размещения мой комментарий по запросу:

не Будет ли (апач) переписывают трафика из Facebook наиболее элегантное решение? На вашей внутренней машине нужно было бы иметь дело только с одним путем, и если бы вы захотели интегрировать приложение с другой службой/платформой на более позднюю дату, вам нужно было бы добавить только другое правило перезаписи, а не вмешиваться в это приложение.

+0

Вам это не нужно. И нет, это будет не самое элегантное решение, потому что если вы не работаете с Apache, это не сработает. На самом деле вам не нужно ничего делать; посмотри на мой ответ. – Seb

1

Я поеду на основе Ask Apache и некоторых правил, которые я установил на несколько старых проектов. Я думаю, что положить его в файл .htaccess в вашем веб-корте будет делать трюк (но это предположение).

Options +FollowSymLinks 
RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_URI} ^/projects/fbapp/pages.* 
RewriteRule ^/projects/fbapp/pages/(*)$ /pages/$1 [L] 

выше должен (если я сделал это право) переписать любой запрос, соответствующий http://server.com/projects/fbapp/pages/ * до * http://server.com/pages/ т.е. http://server.com/projects/fbapp/pages/foo =>http://server.com/pages/foo.

Редактировать Найдено this posted в разделе Apache.

+0

Вам это не нужно, и, более того, если вы не работаете с Apache, это не сработает. На самом деле вам не нужно ничего делать; посмотри на мой ответ. – Seb

 Смежные вопросы

  • Нет связанных вопросов^_^