Подтвердить что ты не робот

.htaccess для URL-адреса PDF

У меня есть структура, называемая /pdf/, где хранятся сгенерированные PDF файлы. Я пытаюсь использовать .htaccess для маршрутизации посетителей в папку PDF.

У меня есть это правило в моем файле .htaccess:

RewriteEngine On
RewriteBase /
RewriteRule (.*) index.php?page=$1.html
RewriteRule ??? for pdf??

(Обратите внимание на метки ???...)

Когда я пытаюсь получить доступ к URL-адресу /manual_chap_1, он работает. Но когда я пытаюсь /pdf/manual_chap_1, похоже, что он не работает. Вот некоторые результаты, которые я вижу:

$_GET[page] => index.php.html

Я хочу, чтобы иметь возможность генерировать PDF файл, если файл PDF не существует в запрошенном месте, а затем, я хочу, чтобы он загружал HTML-страницу.

4b9b3361

Ответ 1

Добро пожаловать в StackOverFlow, попробуйте следующее:

RewriteEngine On
RewriteBase /

RewriteRule ^pdf/([a-z0-9\-_\.]+)$ pdf.php?file=$1 [L,NC,QSA]

RewriteCond %{REQUEST_URI} !^/pdf
RewriteRule ^([a-z0-9\-_\.]+)/?$ index.php?page=$1.html [L,NC,QSA]

L: Флаг [L] заставляет mod_rewrite прекратить обработку набора правил. В большинстве контекстов это означает, что если правило совпадает, дальнейшие правила не будут обработаны. Это соответствует последней команде в Perl или команде break в C. Используйте этот флаг, чтобы указать, что текущее правило следует применять немедленно, не учитывая дальнейшие правила.

QSA:. Когда заменяющий URI содержит строку запроса, поведение RewriteRule по умолчанию заключается в том, чтобы отменить существующую строку запроса и заменить ее вновь созданной. Использование флага [QSA] приводит к объединению строк запроса.

NC: Использование флага [NC] приводит к тому, что RewriteRule будет сопоставляться без учета регистра. То есть, не имеет значения, отображаются ли буквы в верхнем или нижнем регистре в согласованном URI.

Кроме того, я бы рекомендовал использовать тире вместо подчеркивания.