Symfony - символическая ссылка на контроллер для удаления расширения .php из URL - PullRequest
0 голосов
/ 08 июня 2011

Утро, я работаю над этой проблемой в течение нескольких дней и не могу ее решить.

Стек Http: nginx 1.0.4, apache 2.2.3, symfony 1.4.11

В моем веб-каталоге у меня есть символическая ссылка на мой внутренний контроллер, поэтому я могу использовать URL-адреса без расширения .php, например: mysite.com/be_dev.php = mysite.com/be_dev

После некоторого поиска в Googleзаметил, что существует множество способов сделать это, но подход, который я нашел наиболее элегантным, заключался в использовании apache с директивами ForceType.Без этой директивы, когда я использую символическую ссылку в URL, она просто отображает код php, но когда я помещаю директивы ForceType на место, она анализирует php, как и ожидалось.

Единственная проблема, с которой я столкнулся сейчасв том, что когда я перехожу по символической ссылке, она обрабатывает символическую ссылку как веб-корень.Таким образом, файл обслуживается из / be_dev / sf / sf_web_debug / images / * vs / sf / sf_web_debug / images / *.Если я пройду через be_dev.php, то все будет работать, как и ожидалось.

Я пробовал различные правила перезаписи, чтобы удалить / be_dev из пути, чтобы он обслуживался из /, как упоминалось выше, но не могу его зафиксироватьвниз.

Я публикую соответствующие фрагменты конфигурационных файлов.

Заранее спасибо.

/ usr / local / nginx / etc / nginx.conf

...
server {
     ...
     location /sf/ {
         root /home/websrc/projects/app/app1/current/framework/data/web;
     }
     ...
}
...

/ etc / httpd / conf /vhost.d / 10_symfony.conf

<FilesMatch "^(fe|be)?(_dev)?$">
    ForceType application/x-httpd-php
</FilesMatch>

/ etc / httpd / conf / vhost.d / 999_default.conf

Listen 3001
NameVirtualHost localhost:3001

<VirtualHost localhost:3001>

    SetEnv SERVICECLASS dev
    SetEnv SERVICEAPP   app1

    ServerName     myhost.*.mydomain.lan
    ServerAlias    myhost.*.mydomain.com    

    ServerAdmin systems@mydomain.com

    VirtualDocumentRoot /home/%2/projects/app/app1/current/code/web

    <Directory "/home/*/projects/app/app1/current/code/web">
        AllowOverride none
        Options FollowSymLinks

        RewriteEngine on
        RewriteOptions inherit

        #RewriteCond %{REQUEST_URI} ^/be_dev/.* [NC]
        #RewriteRule ^/be_dev/(.*) /$1 [L,NC,PT]
        #RewriteRule be_dev$ /$1 [L]        

        ######
        # Symfony rules
        ######

        # uncomment the following line, if you are having trouble
        # getting no_script_name to work
        #RewriteBase /

        # we skip all files with .something
        RewriteCond %{REQUEST_URI} \..+$
        RewriteCond %{REQUEST_URI} !\.html$
        RewriteRule .* - [L]

        # we check if the .html version is here (caching)
        RewriteRule ^$ index.html [QSA]
        RewriteRule ^([^.]+)$ $1.html [QSA]
        RewriteCond %{REQUEST_FILENAME} !-f

        # no, so we redirect to our front web controller
        RewriteRule ^(.*)$ index.php [QSA,L]

        RewriteRule /^(be_dev)$ /$1.php [L]
        ######
    </Directory>

    LogLevel debug
    CustomLog /var/log/httpd/app1.dev.access.log combined
    ErrorLog /var/log/httpd/app1.dev.error.log
    RewriteLog /var/log/httpd/app1.dev.rewrite.log
    RewriteLogLevel 9

</VirtualHost>

Обновление @ 6.13.2011 Все еще не повезло в выяснении этогоодин, любая помощь приветствуется.

Обновление @ 6.15.2011 Наконец-то получил!Опубликовано в моем блоге @ http://melikedev.com/2011/06/15/symfony-remove-php-from-controller-using-symlink/

1 Ответ

0 голосов
/ 26 октября 2011

Наконец-то выяснили причину, по которой я не смог удалить .php из контроллера, после некоторого осмотра я обнаружил, что мне нужно переопределить параметр 'request' в файле /apps//config/factories.yml.Полный ответ можно найти в моем блоге @ http://melikedev.com/2011/06/15/symfony-remove-php-from-controller-using-symlink/,, краткий ответ приведен ниже.

# /path/to/symfony/apps/<app>/config/factories.yml

# If you don't already have the following activated you will need to make sure it's active under the 'all' directive

all:

...

request:
  class: sfWebRequest # if you are using custom class be sure to replace this with your custom class name
  param:
    logging:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %SF_LOGGING_ENABLED%
    path_info_array:&nbsp;&nbsp; SERVER
    path_info_key:&nbsp;&nbsp;&nbsp;&nbsp; PATH_INFO
    relative_url_root: "" # <---This is what I needed to add

...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...