PHP: поиск в дереве каталогов для файла и путь к файлу возврата

Рассмотрим этот рабочий процесс:

Пользователь делает запрос на website.com/lolmyblogpost

Мой.htacces все как...

RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule .* /index.php

Где в index.php я собираюсь искать файл дерева шаблонов для lolmyblogpost.html возвращения:

/path/to/lolmyblogpost.html

Так что в моем мастер шаблоне я могу:

{include file="{$pathToTemplate}"}

Как я могу найти дерево каталогов для файла и вернуть путь к файлу?

1 ответ

Решение

Что вам действительно нужно, так это поддержка "оглядки назад" с типом по умолчанию. Настройте свой виртуальный хост Apache (что-то) следующим образом:

<VirtualHost *:80>
    ServerName  example.com:80
    ServerAlias www.example.com
    DocumentRoot    "/path/to/root/dir"
    AddDefaultCharset UTF-8
    ErrorDocument 403 "/403.php"
    ErrorDocument 404 "/404.php"
    <Directory /path/to/root/dir>
            Options Indexes FollowSymLinks
            DefaultType application/x-httpd-php
            AllowOverride All
            Order deny,allow
            Allow from all
            AddOutputFilterByType DEFLATE application/javascript text/css text/html text/plain text/xml
            RewriteEngine On
            RewriteBase /
            RewriteCond %{REQUEST_FILENAME} !.index.ph.*
            RewriteRule ^(.*)$  /index.php
    </Directory>
</VirtualHost>

Важная линия DefaultType application/x-httpd-phpЭто означает, что теперь вы можете избавиться от .php расширение файла.

Теперь вы можете использовать URL-адрес, как http://example.com/this_is_a_php_page и вы также можете использовать http://example.com/this_is_a_php_page/with_a_path_info_var,

Скоро this_is_a_php_page (который на самом деле.php файл без расширения) вы можете использовать $_SERVER['PATH_INFO'] проверить и переменные, которые передаются в URI.

Редактировать: Добавлено RewriteEngine и править, чтобы подтолкнуть все к index.php, Это означает, что теперь у вас есть (настоящая) единственная страница на сервере, называемая index.php который нужно будет проверить $_SERVER['REDIRECT_URL'] Вар за то, что действительно было запрошено.

Например, запрос на http://example.com/a_page теперь будет загружать index.php с a_page перешел к $_SERVER['REDIRECT_URL'], ПРИМЕЧАНИЕ: это решение будет подталкивать все к index.php. Вам нужно будет включить исключение, например:

 RewriteCond %{REQUEST_FILENAME} !.not_me_plz.*

Разрешить все файлы, которые начинаются с not_me_plz файлы должны быть обслужены "как ожидалось".

Другие вопросы по тегам