2014-03-04 3 views
1

Я использую Google App Engine с PHP. Я хочу, чтобы все файлы HTML в папке Client_Pages были распознаны и служили статическими файлами, а все файлы PHP в той же папке были распознаны и служили файлами сценариев. Вот что файл app.yaml выглядит следующим образом:Google App Engine app.yaml соответствует всем файлам PHP и соответствует всем файлам HTML и соответствует соответственно

application: myappname 
version: 1 
runtime: php 
api_version: 1 
threadsafe: true 

handlers: 
- url:/
    script: index.php 

- url: /Client_Pages/*.php 
    script: /Client_Pages/*.php 

- url: /Client_Pages/*.html 
    static_dir: Client_Pages/*.html 

Я думаю asterisk не работает в качестве шаблона в app.yaml? Я попытался использовать:

- url: /(.+\.php) 
    script: Client_Pages/\1 

Но это не работает. Я даже не знаю, что означают все символы, поэтому я просто взламываю, надеясь, что что-то сработает. Я не хочу этого делать, но я не могу найти документацию для всех этих символов.

Это будет работать на конкретной странице:

- url: /Client_Pages/InputForm.php 
    script: /Client_Pages/InputForm.php 

я мог бы поставить строку в моем app.yaml файл для каждой страницы на моем сайте, но я предпочел бы найти другой способ.

О, подождите! Оставайтесь на линии! Это работает для загрузки моих PHP файлов:

- url: /(.+\.php) 
    script: \1 

Так что же \1 значит? Или где хорошая ссылка?

Хорошо, так что вышеупомянутые работы для php страниц, но это будет НЕ работы для HTML-страниц, то почему?

- url: /(.+\.html) 
    static_dir: \1 

У меня есть на работе. Это позволит загрузить оба мои PHP и HTML страницы:

- url: /(.+\.php) 
    script: \1 

- url: /Client_Pages 
    static_dir: Client_Pages 

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

Я извиняюсь за то, что нашел частичный ответ на свой вопрос в процессе его публикации, но если кто-то сможет объяснить, почему он работает, я дам вам то, что вы заслуживаете.

ответ

5

python Ссылка на регулярное выражение, вероятно, проще всего следовать и ближе всего к тому, что здесь происходит, наряду с ссылкой app.yaml.

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

Так в основном для регулярного выражения

/(.+\.php) 

говорит "сделать первую группу любого значения, которое соответствует регулярному выражению. + \. PHP. Значение, которое соответствует регулярному выражению, может быть получено с помощью \ 1, в котором указана первая группа.

Таким образом, значение /foobar.php соответствует регулярному выражению. +. Php, а значение \ 1 становится foobar.php из-за() вокруг регулярного выражения.

Немного сложнее:

/(.+)/(.+)\.php$ 

Значение /foo/bar.php будет соответствовать этому регулярному выражению, \ 1 будет равна «Foo» [, как это первая группа в регулярном выражении] и \ 2 будет равен «bar» [поскольку это вторая группа].

Обратите внимание, что это регулярное выражение не соответствует /foobar.php.

Вы также можете сделать что-то подобное, чтобы URL-адрес не нуждался в нем .php.

- url: /(.+) 
    script: \1.php 

Используя static_dir, вы удаляете необходимость группировки, так как она будет соответствовать любому файлу, находящемуся в каталоге.

Если вы хотите, чтобы соответствовать только * .html файлы, которые вы могли бы использовать

- url: /Client_Pages/(.*)\.html$ 
    static_files: Client_Pages/\1.html 
    upload: Client_Pages/*\.html$ 

Наконец, вещь, чтобы помнить с app.yaml, как он обрабатывает правила сверху вниз, а первый матч выполненных и обрабатываемых стопов.

Так app.yaml как

- url: /.* 
    script: index.php 

- url: /(.+)\.html 
    static_dir: html_pages 

бы всегда выполнить index.php как первое регулярное выражение будет соответствовать любой Incomming URL.

+0

Я попытался использовать 'static_files:' с 'upload:' и просто 'html' файлы, и он прекратил обслуживать некоторые' css' файлы, которые у меня были в подкаталоге. Поэтому, я думаю, я просто буду использовать 'static_dir', чтобы распознавать все html и css-файлы и обслуживать их. Файлы 'php' не будут реагировать ни на что, кроме обработчика' script: '. –

+1

просто добавьте css в regex then (css | html) $ и т. Д. Взгляните на wordpress app.yaml -> https://developers.google.com/appengine/articles/wordpress –

+0

Спасибо, я увидел это: ' - url:/(. * \. (htm | html | css | js)) $ 'Есть ли преимущество в его настройке? Я затрудняюсь понять цель конфигурации. Если конфигурация все равно соответствует всем, то в чем смысл? –

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