Ajax и запросы администратора перестали работать, введя правила переписывания модов - PullRequest
3 голосов
/ 05 мая 2011

Я новичок в переписывании URL.

Я написал несколько правил перезаписи в файле .htaccess. Моя проблема в том, что запрос ajax и раздел администратора (оба из которых управляются разными файлами с именами ajax.php и admin.php) вообще не работают.

Вот что я пытаюсь достичь, используя mod-rewrite:

URL: http://websitename/index.php?page=rr&cn=abc&cid=1
должно выглядеть так: http://websitename/rr/abc/1
в адресной строке браузера

и

URL (имеющий только значение страницы): http://websitename/index.php?page=register
должно выглядеть так: http://websitename/register
в адресной строке браузера

и

URL: http://websitename/index.php?page=i&in=banking&iid=12
должно выглядеть так: http://websitename/industry/banking/12
в адресной строке браузера

и

URL: http://websitename/index.php?page=cr&cn=pqr&rid=12
должно выглядеть так: http://websitename/cr/pqr/12
в адресной строке браузера

Пока я могу сделать это, используя следующие правила, но запрос к ajax.php и admin.php вместе с некоторыми параметрами вообще не работает (страница не найдена).

Options +FollowSymLinks
RewriteEngine on

RewriteRule ^([A-Za-z0-9-]+)/([^/]+)/([^/]+)$ index.php?page=$1&companyname=$2&companyid=$3%{QUERY_STRING} [L,QSA]

RewriteRule ^([^/]+)$ index.php?page=$1%{QUERY_STRING} [L,QSA]

RewriteRule ^view/([^/]+)/([^/]+)/([^/]+)$ index.php?page=$1&industryname=$2&industryid=$3%{QUERY_STRING} [L,QSA]

RewriteRule ^([^/]*)/([^/]*)/review/([^/]*)$ /index.php?page=$1&companyname=$2&reviewid=$3 [L]

Все три правила перезаписи модов работают нормально, но запросы ajax, выполняемые через отдельный файл с именем "ajax.php", не работают (появляется страница, не найденная)

т.е. следующие URL-адреса должны работать с вышеуказанными правилами перезаписи мода
http://websitename/ajax.php?action=vote
и
http://websitename/admin.php?page=home

(не нужно иметь правила перезаписи модов для файлов ajax.php и admin.php)

Но я не могу успешно сделать это для ajax.php и admin.php

Пожалуйста, помогите мне в этом. Я действительно застрял на этом.

Спасибо

Ответы [ 3 ]

1 голос
/ 11 мая 2011

Судя по всему, мне кажется, ваше второе правило перезаписи будет перехватывать оба URL, которые вы не хотите переписывать.

RewriteRule ^([^/]+)$ index.php?page=$1%{QUERY_STRING} [L,QSA]

Оба эти URL-адреса будут включены в вышеприведенное правило перезаписи

Я предлагаю изменить ваш htaccess на следующее, все, что он пытается сделать, это перехватывать вызовы admin.php или ajax.php и отправлять их без изменений (я не проверял это, но все должно быть в порядке):

Options +FollowSymLinks
RewriteEngine on

RewriteRule ^/ajax.php(.*)$ /ajax.php$1 [L,QSA]
RewriteRule ^/admin.php(.*)$ /admin.php$1 [L,QSA]

RewriteRule ^([A-Za-z0-9-]+)/([^/]+)/([^/]+)$ index.php?page=$1&companyname=$2&companyid=$3%{QUERY_STRING} [L,QSA]

RewriteRule ^([^/]+)$ index.php?page=$1%{QUERY_STRING} [L,QSA]

RewriteRule ^view/([^/]+)/([^/]+)/([^/]+)$ index.php?page=$1&industryname=$2&industryid=$3%{QUERY_STRING} [L,QSA]

RewriteRule ^([^/]*)/([^/]*)/review/([^/]*)$ /index.php?page=$1&companyname=$2&reviewid=$3 [L]
0 голосов
/ 16 мая 2011

Префикс каждого RewriteRule со следующим:

RewriteCond %{REQUEST_FILENAME} !-s

С ним ваши правила будут работать только тогда, когда они ссылаются на несуществующий файл.Запросы на выход из файлов, в частности ajax.php и admin.php, будут дословно оставлены.

0 голосов
/ 11 мая 2011

Случайное предположение, может быть, ajax.php и admin.php ассимилируются в правилах 2 или 4 из-за ведущего '/'. Я немного запутался в точной работе mod_rewrite, но это может быть как-то связано с этим.

Попробуйте добавить правило по правилу и протестируйте страницы admin.php и ajax.php, чтобы выяснить, по каким правилам эти страницы не работают.

...