Попытка получить общую библиотеку php / javascript с помощью mod_rewrite - PullRequest
2 голосов
/ 09 ноября 2010

Это новое понимание вопроса, который я написал ранее:

У меня есть фрагмент mod_rewrite, который выясняет, существуют ли файлы javascript, css, php на поддомене, где они вызываются (например, subdomain.example.com).Если они не существуют, то apache «перенаправляет» на common.example.com, где находятся обычные файлы js, css и php.См. Ниже:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.(js|css|php)$ http://common.example.com/$1.%2 [L]

Это работает, если:

  • Вы явно подключаете запрошенное имя файла в адресную строку.
  • Это также работает, если на js или css есть ссылка / ссылка в разметке html.

Не работает, если

  • URL-адрес используется внутри файла php или js (например, для вызова ajax).Вместо этого он ссылается на поддомен, где находится html-страница (т. Е. Mod_rewrite не перехватывает ее): subdomain.example.com

Спасибо SO за вашу помощь

EDIT

В соответствии с запросом Пекки, вот пример:

  1. Например, subdomain.example.com / test.html
  2. test.html ссылки <script src="/code/js/test.class.js" type="text/javascript" ></script>
  3. В test.class.js существует $.ajax({ url: "/code/php/test.php", dataType : "json", data: {cmd : 'someCommand'}, success: callback()});

..

  • Таким образом, в # 2 он находит common.example.com/code/js/test.class.js (Правильно!)
  • Но в # 3 ajax вызывает subdomain.example.com/code/php/test.php (Неверно! Из-за subdomain)

1 Ответ

0 голосов
/ 09 ноября 2010

Это побочный эффект изменения домена (как оказалось) изменения протокола внутри перезаписи.

Указав полный URL-адрес в RewriteRule вместо пути в файловой системеВы заставляете сервер отправлять заголовок 301 redirect для каждого запроса.

AJAX-запросы обычно следуют за перенаправлениями заголовков , , но вы перенаправляете в другой домен, нарушая, таким образом, Same Origin Policy !

Это означает, что для запросов Ajax вы не можете использовать этот метод перенаправления.Вам нужно будет указать путь к файловой системе в вашем RewriteRule, чтобы перезапись могла происходить внутри (чтобы браузер оставался subdomain.example.com/code/php/test.php).Я не знаю, можно ли это сделать в вашей настройке.

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