Конфликт контактной формы PHP с директивами .htaccess на html-ном сайте

Futuris
На сайте с 05.07.2014
Offline
74
532

Господа знатоки Apache подскажите как разрешить следующую ситуацию.

Делаем сайт на html. На сайте необходимо убрать расширения .html, добавить закрывающий слэш в конце URL и настроить страницу 404.

Это было сделано с помощью директив:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^mysite\.ru$ [NC]
RewriteRule ^(.*)$ http://mysite.ru/$1 [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.*[^/])$ /$1/ [R=301,L]

RewriteCond %{DOCUMENT_ROOT}/$1.html -f
RewriteRule ^(.+)/$ $1.html [L]

ErrorDocument 404 /errors/404.html

Затем мы добавили контактную форму (php jquery) и, как оказалось, она не срабатывает и конфликтует с вышеуказанными директивами.

Если их вычистить - форма работает, но мы лишаемся необходимых настроек.

Может кто посоветовать как правильно прописать форму сохранив нужные нам настройки?

J
На сайте с 20.02.2014
Offline
120
jkm
#1

Вместо


RewriteCond %{DOCUMENT_ROOT}/$1.html -f
RewriteRule ^(.+)/$ $1.html [L]

Так


RewriteCond $1.php ^page.php$ [or]
RewriteCond $1.html ^.+
RewriteCond %{DOCUMENT_ROOT}/%0 -f
RewriteRule ^(.+)/$ %0 [L]

Или так


RewriteCond %{DOCUMENT_ROOT}/$1.html -f
RewriteRule ^(.+)/$ $1.html [L]

RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+)/$ $1.php [L]
Futuris
На сайте с 05.07.2014
Offline
74
#2
jkm:
Вместо

Так

RewriteCond $1.php ^page.php$ [or]
RewriteCond $1.html ^.+
RewriteCond %{DOCUMENT_ROOT}/%0 -f
RewriteRule ^(.+)/$ %0 [L]


Или так

RewriteCond %{DOCUMENT_ROOT}/$1.html -f
RewriteRule ^(.+)/$ $1.html [L]

RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+)/$ $1.php [L]

К сожалению не срабатывает ни один вариант. :( Но вам большое спасибо за предыдущую помощь.))

J
На сайте с 20.02.2014
Offline
120
jkm
#3

Под page.php подразумевался скрипт контактной формы.

Если данные передаются методом POST на адрес page.php, то правило RewriteRule ^(.*[^/])$ /$1/ [R=301,L] выполнит редирект на адрес /page/ и все данные формы потеряются. Проверьте что форма отправляется сразу на адрес /page/.

Если нет возможности исправить скрипт, то можно добавить исключение для POST запросов


RewriteCond %{REQUEST_METHOD} !=POST [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.*[^/])$ /$1/ [R=301,L]
Futuris
На сайте с 05.07.2014
Offline
74
#4

Спасибо, переписали адрес и заработало!)))

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий