PHP: обслуживать страницы без файлов .php в файловой структуре

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

Итак, если я посещаю сайт www.mysite.com/new-page, мне бы хотелось, чтобы это просто ссылка на мой шаблон, контент и т. Д., А не на настоящий .php-файл.

Извините, если я не объяснил это правильно, но мне сложно объяснить это.

Благодарю.

Related of "PHP: обслуживать страницы без файлов .php в файловой структуре"

Похоже, вам нужен шаблон Front Controller .

В основном каждый URL-адрес перенаправляется на одну страницу PHP, которая определяет, что с ним делать. Вы можете использовать Apache mod_rewrite для этого с помощью этого .htaccess:

RewriteEngine on RewriteBase / RewriteRule !\.(js|ico|txt|gif|jpg|png|css)$ index.php 

Это перенаправляет все, кроме файлов статического содержимого, на index.php. При необходимости отрегулируйте.

Если вы просто хотите повлиять на URL / новую страницу, попробуйте что-то вроде:

 RewriteEngine on RewriteBase / RewriteRule ^new-page/ myhandler.php 

Любые URL-адреса, начинающиеся с «новой страницы», будут отправлены на myhandler.php.

Обычно это веб-сервер, который обрабатывает это для вас в сочетании с вашим PHP-кодом. Например, если вы используете Apache, вы можете использовать mod_rewrite, чтобы сделать что-то вроде:

 RewriteEngine on RewriteRule ^page/([^/\.]+)/?$ index.php?page=$1 [L] 

А затем в вашем php-коде вы можете проверить $_GET['page'] чтобы увидеть, какая страница вызывается.

Так что посещение mysite.com/page/blah действительно mysite.com/page/blah бы доступ к index.php?page=blah .

Решение использовать mod_rewrite для перезаписи URL-адресов на одной из страниц PHP. Я предпочел бы использовать более общее правило перезаписи, которое переписывает любые URL-адреса, которые не относятся к файлу каталога, существующего на сервере.

 # Rewrite URLs of the form 'x' to the form 'index.php?q=x'. RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !=/favicon.ico RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]