Почему отображение htaccess-значения заканчивается на конце файла? - PullRequest
1 голос
/ 14 октября 2019

Я создал htaccess-файл, чтобы скрыть окончания файлов и предварительно настроить URL-адреса. Теперь, пробуя все, что я вижу, повторение значения с предварительно подтвержденного URL показывает окончание файла в результате.

Это сильно варьировалось, так как я не был уверен, в чем проблема. Так было ([0-9a-zA-Z]+) например. Я также пробовал решения из StackOverflow.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^([^\.]+)$ $1.php [NC,L]

RewriteRule ^events/([^/]+)$ viewevent.php?c=$1 [L,QSA]

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

И мой файл viewevent.php

<?
echo $_GET["c"];
?>

Я использовал разные варианты, но это либо ошибка, либо конец файла,И URL-адрес, который я ввожу: url / events / bino. Я ожидаю bino, но я получаю bino.php.

В чем проблема?

Ответы [ 2 ]

1 голос
/ 14 октября 2019

Ваши правила нуждаются в переупорядочении, иначе в текущем состоянии оно перенаправит http://example.com/events/foo на https://example.com/viewevent.php?c=foo, тем самым раскрыв ваш внутренний обработчик.

Более того, вам нужно добавить .php для файлов, которые действительно существуют в вашей файловой системе. как файл php.

Вы можете использовать этот код:

RewriteEngine On

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^events/([^/]+)/?$ viewevent.php?c=$1 [L,NC,QSA]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]
0 голосов
/ 14 октября 2019

Ответ был прост. Поместите RewriteRule ^([^\.]+)$ $1.php [NC,L] в конец файла, иначе он как бы смешивается с другими правилами.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^events/([^/]+)$ viewevent.php?c=$1 [L,QSA]
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteRule ^([^\.]+)$ $1.php [NC,L]
...