Правильное правило перезаписи, создающее внутреннюю ошибку сервера - PullRequest
0 голосов
/ 12 марта 2019

Здесь была моя первая проблема.Некоторые люди делают ссылки на мой сайт, но с неправильными URL-адресами, обычно добавляя странный символ после URL.

, например, вместо ссылки на: www.example.com/hello.php, на которую они ссылаются: www.example.com/hello.php+fiat, после чего произошла ошибка 404.

Я создал такое правило переписывания, которое работает как чудо:

RewriteRule ^([a-z0-9\-/_]*\.php).* $1 [L]

iпробовал, что 2 с таким же поведением (работает нормально)

RewriteRule ^(.*\.php).* $1
RewriteRule ^(.*\.php).*$ $1

все, что после .php удаляется и затем направляется на правильный URL.Вопросительный знак не является проблемой при переписывании, что означает, что у меня много страниц с xyz.php? id =, и я хочу оставить их как есть.

, но теперь, по непонятной причине, когда явведите URL, который не существует, например: example.com/toto/index.php У меня ошибка 500 внутреннего сервера вместо обычной страницы 404.но если я удалю свое правило, то у меня снова будет страница 404. Как обычно,

, если она может помочь, единственное правило, которое вызывает сбой Apache:

RewriteRule ^(.*\.php).* $1 [R=301,L]

Любоеидея?(на Apache 2.2)

Спасибо

1 Ответ

0 голосов
/ 13 марта 2019
RewriteRule ^(.*\.php).* $1 [R=301,L]

Скорее всего, создаст бесконечный цикл, так как любой URL, который не имеет ничего после php, будет совпадать и перенаправлять на себя, поскольку последовательность, следующая за .php, является необязательной.

Вы должны изменить окончательный .* на .+

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...