Что происходит с исходным файлом .h при использовании автоинструментов?

Альтернативы mod_rewrite

Многие базовые схемы виртуальных URL-адресов могут быть достигнуты без использования RewriteRules. Apache позволяет запускать скрипты PHP без расширения .php и с виртуальным аргументом PATH_INFO.

  1. Используйте PATH_INFO , Luke

    В настоящее время AcceptPathInfo On часто включается по умолчанию. В основном это позволяет .php и другим URL-адресам ресурсов переносить виртуальный аргумент:
    http://example.com/script.php/virtual/path
    
    Теперь этот /virtual/path отображается в PHP как $_SERVER["PATH_INFO"] , где вы можете обрабатывать любые дополнительные аргументы, как вам нравится. Это не так удобно, как разделить сегменты входного пути Apache на $1, $2, $3 и передать их как различные переменные $_GET в PHP.

  2. Включить MultiViews , чтобы скрыть расширение .php

    . Самый простой вариант - также отключить .php «Расширения файлов» в URL-адресах разрешены:
    Options +MultiViews
    
    Это означает, что Apache выбирает article.php для HTTP-запросов на /article из-за соответствующего базового имени. И это хорошо работает вместе с вышеупомянутой функцией PATH_INFO. Таким образом, вы можете просто использовать URL-адреса, такие как http://example.com/article/virtual/title. Это имеет смысл, если у вас есть традиционное веб-приложение с несколькими точками / сценариями PHP-скриптов. Обратите внимание, что MultiViews имеет другую / более широкую цель. Это повлечет за собой незначительное исполнение, потому что Apache всегда ищет другие файлы с соответствующими базовыми именами. Это фактически означает Content-Negotiation , поэтому браузеры получают лучшую альтернативу доступным ресурсам (например, article.en.php, article.fr.php, article.jp.mp4).
  3. SetType или SetHandler для сценариев без расширения .php

    . Более ориентированный подход, чтобы избежать переноса суффиксов .php в URL-адресах, - это настройка обработчика PHP для других файловых схем. Самый простой вариант - переопределить тип MIME / обработчика по умолчанию с помощью .htaccess:
    DefaultType application/x-httpd-php
    
    Таким образом, вы можете просто переименовать свой скрипт article.php только в article (без расширения), но все же обработать его как PHP-скрипт. Теперь это может иметь некоторые последствия для безопасности и производительности, поскольку теперь все файлы без расширения будут переданы через PHP. Поэтому вы можете альтернативно установить это поведение только для отдельных файлов:
    
      SetHandler application/x-httpd-php
      # or SetType 
    
    
    Это несколько зависит от настройки вашего сервера и используемого PHP SAPI. Общие альтернативы включают ForceType application/x-httpd-php или AddHandler php5-script. Снова обратите внимание, что такие настройки распространяются от одного .htaccess до подпапок. Вы всегда должны отключать выполнение сценария (SetHandler None и Options -Exec или php_flag engine off и т. Д.) Для статических ресурсов и загрузки / каталогов и т. Д.
  4. Другие схемы перезаписи Apache

    Среди его много вариантов, Apache предоставляет функции mod_alias, которые иногда работают так же хорошо, как и mod_rewrite s RewriteRules. Обратите внимание, что большинство из них должны быть настроены в разделе , но не в файлах конфигурации .htaccess для каждого каталога. ScriptAliasMatch в первую очередь предназначен для скриптов CGI, но также должен работать для PHP. Он позволяет регулярные выражения так же, как и любые RewriteRule. На самом деле это, пожалуй, самый надежный вариант для конфигурирования переднего контроллера. И простой Alias помогает с несколькими простыми схемами перезаписи. Даже простая директива ErrorDocument может использоваться, чтобы позволить скрипту PHP обрабатывать виртуальные пути. Обратите внимание, что это обходное решение kludgy, однако, запрещает все, кроме запросов GET, и наводняет error.log по определению. См. http://httpd.apache.org/docs/2.2/urlmapping.html для получения дополнительных советов.

0
задан chux 24 March 2019 в 19:21
поделиться

2 ответа

Как уже заметил @ptomato, AC_CONFIG_HEADERS предназначен для запроса, чтобы скрипт configure создал для вас файл заголовка при запуске, в котором он определяет макросы, передающие различную информацию, которую он почерпнул, например, результаты различные тесты. Аргумент макроса указывает имя, которое должен иметь этот сгенерированный файл. Это альтернатива всей этой информации, передаваемой командам компиляции в командной строке. Это не имеет никакого отношения к именованию файла заголовка, предоставленного среди источников, и это, безусловно, приведет к замене любого такого заголовка. Также бесполезно, если ваши источники не #include обозначают заголовок.

Неясно, нужен ли вам такой заголовок конфигурации, но если shell.h является предоставленным вами заголовком, и вы не хотите, чтобы configure перезаписывал его, не указывайте его имя для AC_CONFIG_HEADERS. Вероятно, вы можете вообще обойтись без AC_CONFIG_HEADERS, хотя мне лично это нравится, потому что его использование облегчает чтение конечного результата make. Если вы продолжаете использовать его, вам нужно выбрать другое имя (например, обычное config.h), и вам нужно иметь все ваши источники C #include с заголовком, прежде чем они сделают что-либо еще.

Чтобы сообщить Automake заголовок, предоставленный среди источников, которые в конечном итоге не установлены, просто перечислите его среди _SOURCES хотя бы одной цели. Automake знает, что не нужно пытаться компилировать заголовки, но перечисление их среди ваших источников гарантирует, что они будут упакованы в дистрибутивные архивы, созданные с помощью make dist. Существуют альтернативы, такие как перечисление таких заголовков в EXTRA_DIST, но они менее традиционны.

0
ответ дан John Bollinger 24 March 2019 в 19:21
поделиться

AC_CONFIG_HEADERS ( документация ) выводит сгенерированный Autoconf заголовочный файл с информацией о пакете и среде, используемой для его компиляции.

Обычно этот файл называется config.h, но вы, кажется, назвали его shell.h, который переписал другой файл shell.h, который вы создали вручную, я полагаю?

Если это так, то Решением будет использование другого имени в AC_CONFIG_HEADERS.

0
ответ дан ptomato 24 March 2019 в 19:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: