|
|
|
| Когда администратор какой-либо CMS создает новый раздел или новую страницу, то в интернете они имеют вид
http://softtime.ru/forum/
http://softtime.ru/theme.php
|
Но в реале на сервере директории с именем forum и файла с именем theme.php, естественно, нет.
А как на CMS создаются такие разделы и страницы?
Как можно предположить, в .htaccess посредством mod_rewrite производится вызов специального скрипта, который и определяет, какой контент извлечь из базы и выдать посетителю.
Но это только гипотеза, а как на самом деле? | |
|
|
|
|
|
|
|
для: Владимир55
(06.09.2013 в 12:02)
| | Так и есть, более того, стараются в .htaccess создать одно правило, а сравнение адреса с правилами осуществлять уже в модуле роутинга, например, при помощи регулярных выражений. | |
|
|
|
|
|
|
|
для: cheops
(06.09.2013 в 21:34)
| | Если в файле .htaccess задать правило:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php
</IfModule>
| то обращение к любой странице сайта вызовет файл index.php
Верно?
Если верно, то как в файле index.php "ловить" имя страницы, к которой было обращение? | |
|
|
|
|
|
|
|
для: Владимир55
(06.09.2013 в 22:07)
| | $_SERVER["REQUEST_URI"], parse_url, explode ... etc | |
|
|
|
|
|
|
|
для: Владимир55
(06.09.2013 в 22:07)
| | Не к любой. За исключением реально существующего файла !-f и реально существующей папки !-d
>Если верно, то как в файле index.php "ловить" имя страницы, к которой было обращение?
При помощи элементов массива $_SERVER, например, $_SERVER['REQUEST_URI'] | |
|
|
|
|
|
|
|
для: cheops
(06.09.2013 в 22:18)
| | Спасибо! | |
|
|
|
|
|
|
|
для: Владимир55
(06.09.2013 в 22:07)
| | А каким образом расширить эту инструкцию для того, чтобы обращение по несуществующему адресу, начинающемуся с директории catalog, приводило к переадресации на файл index.php в этом каталоге? | |
|
|
|
|
|
|
|
для: Владимир55
(30.09.2013 в 17:35)
| | Обычно второе правило добавляют перед первым, нечто вроде этого
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^catalog/(.*)$ /catalog/index.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php
</IfModule>
|
| |
|
|
|
|
|
|
|
для: cheops
(01.10.2013 в 07:23)
| | Спасибо!! | |
|
|
|