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
файлы должны быть обслужены "как ожидалось".