Флаг mod_rewrite [PT] возвращает неверный запрос - PullRequest
1 голос
/ 10 января 2012

Изначально этот код был написан для создания "pretty" urls.

При использовании приведенного ниже кода mod_rewrite работает как следует.

<Directory /var/www/vhosts/myurl.com/httpdocs>
    Options Indexes FollowSymLinks
    php_admin_flag engine on
    php_admin_value open_basedir none
    AllowOverride all
    Order allow,deny
    Allow from all
</Directory>

RewriteEngine on
RewriteCond %{HTTPS} !=off
RewriteCond %{LA-U:REQUEST_FILENAME} !-f
RewriteCond %{LA-U:REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index\.php$
RewriteCond $1 ^(register|account|logout|profile|edit_profile).*$
RewriteRule ^/(.*)$ https://myurl.com/?get=$1 

Он принимает любой соответствующий URL-адрес, такой как https://myurl.com/register, и переписывает его как https://myurl.com/?get=register. Соответствующая страница найдена и отображается в браузере.

Однако я хочу, чтобы исходный URL был передан в браузер. Для этого я добавил флаг [PT] в мой RewriteRule, как показано ниже:

RewriteRule ^/(.*)$ https://myurl.com/?get=$1 [PT]

Это позволяет https://myurl.com/register (тот же URL, что и выше) пройти в браузер, но больше не отображает страницу Вместо этого он возвращает следующую ошибку:

Bad Request
Your browser sent a request that this server could not understand.
Client sent malformed Host header

Соответствующая информация:

ОС: Linux
Сервер: Apache
Управление: Plesk
Каталог: /var/www/vhosts/myurl.com/conf
Файл: vhost_ssl.conf

Я искал несколько форумов и статей безрезультатно.

Статья 1: Создание более симпатичных URL с помощью mod_rewrite (включает использование флага [PT])

У кого-нибудь есть идеи о том, что здесь происходит и как это исправить? Как я могу получить "симпатичный" URL для отображения?

1 Ответ

0 голосов
/ 11 января 2012

Итак, после двух дней разочарования я наконец-то решил головоломку.

Сначала я экспериментировал с RewriteRule , изменив его с:

RewriteRule ^/(.*)$ https://myurl.com/?get=$1 [P]

до

RewriteRule ^/(.*)$ https://myurl.com/index.php?get=$1

без флагов.

Это создавало бесконечный цикл при каждом запуске перезаписи. Но я заметил, что цикл происходил без перенаправления url (поддерживая 'pretty url' ). Прогресс!

Я решил упростить код. Я удалил 'LA-U:' из RewriteCond , как показано ниже:

RewriteCond %{LA-U:REQUEST_FILENAME} !-f
RewriteCond %{LA-U:REQUEST_FILENAME} !-d

до

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

Это добилось цели! Спасибо тем, кто прокомментировал. Надеюсь, это поможет кому-то в будущем.

...