Я думаю, что это должно сделать трюк. Я просто добавил if(isset
и добавил конкатенацию к переменным в теле, чтобы отделить PHP от HTML.
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: yoursite.com';
$to = 'contact@yoursite.com';
$subject = 'Customer Inquiry';
$body = "From:" .$name."\r\n E-Mail:" .$email."\r\n Message:\r\n" .$message;
if (isset($_POST['submit']))
{
if (mail ($to, $subject, $body, $from))
{
echo '<p>Your message has been sent!</p>';
}
else
{
echo '<p>Something went wrong, go back and try again!</p>';
}
}
?>
У вас есть косая черта «/», закодированная в URL-адресе. Apache не допускает их из-за потенциальных атак. Для этого есть настройка:
System.setProperty("org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH", "true");
или
-Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
См. Аналогичный пост .
Вероятно, у вас есть одна из двух проблем:
1) Вы не включили порт в свой URL. Либо вы настроили порт Tomcat на порт 80, и в этом случае порт не нужен, либо вам нужно включить порт, который по умолчанию равен 8080, например:
http://localhost:8080/file/demo/%2Be4%2FE5cR%2FaM%3D
2) Вы добавляя зашифрованный идентификатор как часть самого URL-адреса, который должен быть сопоставлен с сервлетом / JSP / представлением какого-либо типа в ваших сопоставлениях URL-адресов и вряд ли. Tomcat не узнает уникальный идентификатор и не знает соответствующего обработчика для вызова процесса обработки. Предполагая, что вы намереваетесь вызывать сервлет / JSP / контроллер, который сопоставляется с '/ file / demo', вы скорее захотите передать идентификатор в качестве параметра запроса, например:
http://localhost:8080/file/demo?id=%2Be4%2FE5cR%2FaM%3D
org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
вconf/catalina.properties
, что, вероятно, является лучшим способом для этого. – Jules 27 February 2018 в 10:41