Как объединить RewriteRule index.php, и запросы переписывают и избегают Ошибки Сервера 404?

Нет никакого разумного способа ответить на это, потому что это зависит только от Ваших пользователей и типа электронных писем, которые они получают. Как пример, если у Вас есть многие графики, они получат много больших электронных писем, в то время как учетная запись может только получить несколько маленьких файлов Excel.

Запустите с низкой стоимости и посмотрите, как Ваши пользователи используют это. Если возможно, можно все еще увеличить квоту впоследствии.

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

1
задан 24 September 2012 в 11:29
2 ответа

Чтобы включить RewriteRule для index.php , необходимо добавить исключения перезаписи запросов.

Эти правила работают нормально и устраняют эту проблему:

# Remove question mark and parameters
RewriteCond %{QUERY_STRING} .+
# Query rewrite exceptions
RewriteCond %{REQUEST_FILENAME} !index.php
RewriteCond %{REQUEST_URI}?%{QUERY_STRING} !/api(/.*)?\?callback=.*
RewriteRule .*$ %{REQUEST_URI}? [R=301,L]

# index.php query rewrite
RewriteRule ^api(?:/([^/]*))?$ index.php?api&url=$1 [QSA,L]
RewriteRule ^([^.]*)$ index.php?url=$1 [QSA,L]
0
ответ дан 4 December 2019 в 09:45

Думаю, я должны на самом деле объяснить это после 3 комментариев с просьбой удалить ! из вашего условия:

# Rewrite index.php queries
RewriteCond %{REQUEST_URI}?%{QUERY_STRING} !/api(/.*)?\?callback=.*
# Server Error 404 on /api/?callback=foo and /api/whatever?callback=foo
RewriteRule ^api(?:/([^/]*))?$ index.php?api&url=$1 [QSA,L]

Это правило, которое у вас есть, очевидно, пытается обработать / api запросов, и вот что происходит:

  1. Вы запрашиваете / api? callback = foo
  2. Проверяете условие RewriteCond% {REQUEST_URI}?% {QUERY_STRING}! / api (/.*) ? \? callback =. *
  3. Не соответствует, потому что / api? callback = foo не соответствует ! / api (/.*)? \? callback =. * . ! говорит «URI НЕ ДОЛЖЕН БЫТЬ / api`
  4. Правило заканчивается, ничего не происходит, потому что условие не выполняется

Другой пример

  1. Вы запрашиваете / blah /
  2. Проверить соответствие условию RewriteCond% {REQUEST_URI}?% {QUERY_STRING}! / api (/.*)? \ ? callback =. *
  3. Условие соответствует, потому что / blah не является / api? callback =
  4. Попробуйте применить правило RewriteRule ^ api (?: / ([^ / ] *))? $ index.php? api & url = $ 1 [QSA, L]
  5. Правило не работает, потому что регулярное выражение говорит: URI ДОЛЖЕН НАЧАТЬ С / api , поскольку URI равен / blah , правило не применяется, ничего не происходит.

Итак, как вы видите, несмотря ни на что, ваше правило никогда ничего не сделает. Вам необходимо изменить свое условие, чтобы оно не отменяло / api , потому что ВЫ ХОТИТЕ / api, весь смысл правила начинается с . Просто сопоставьте строку запроса:

RewriteCond %{QUERY_STRING} callback=
RewriteRule ^api(?:/([^/]*))?$ index.php?api&url=$1 [QSA,L]

Простого удаления ! достаточно, но это избыточно, потому что вы все равно сопоставляете с / api в правиле:

# This works too
# Look! no more ! here -------------------v
RewriteCond %{REQUEST_URI}?%{QUERY_STRING} /api(/.*)?\?callback=.*
RewriteRule ^api(?:/([^/]*))?$ index.php?api&url=$1 [QSA,L]
0
ответ дан 4 December 2019 в 09:45

Теги

Похожие вопросы