mod_rewrites .htaccess не работает с хостингом Godaddy (Linux) - PullRequest
0 голосов
/ 26 января 2012

На моем сайте www.sqcp.com при тестировании на другом linux-сервере все работало как надо.Однако с момента перемещения его в Godaddy, mod_rewrites не работает, поэтому ни одна из других страниц не была доступна.Даже если я создам пустую директорию / папку в том, что она пытается привести в соответствие URL-адрес к ней, она будет работать для этой страницы (очевидно, это не исправление).* файл.

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteRule ^index\.php$ / [L,R=301]

    RewriteRule (.*)/{2,}$ /$1/ [L,R=301]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php
    RewriteRule (.*)\.php$ /$1/ [L,R=301]

    RewriteRule ^(.*)/(\d{4}\-\d{2}\-\d{2}\-[a-zA-Z0-9\-_]+)$ $1?s=$2 [L]

    RewriteRule ^(.*/)?staff.php/([a-zA-Z0-9\-_]+) $1staff.php?s=$2 [L]


    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule (.*)/$ $1.php [L] 

    RewriteCond %{REQUEST_FILENAME}/index.php !-f
    RewriteRule (.*)/$ $1 [L] 
</IfModule>

Ответы [ 2 ]

1 голос
/ 26 января 2012

Godaddy предоставляет отличную услугу общего хостинга, предназначенную для большого сектора рынка - пользователей, которым нужен активный сайт (то есть с некоторыми сценариями), но без затрат или сложности оплаты или опыта в администрировании собственного Linux VM. Это не проблема GoDaddy. Это твое.

Итак, сначала разберитесь в среде, в которой вы работаете, запустив скрипт phpinfo и убедитесь, что он создает переменные, которые вы используете. Насколько я могу видеть на вашем примере:

Правила 1-3 - это 301 перенаправление, чтобы обеспечить соблюдение соглашения о присвоении имен.

  • Правило 1 перенаправляет /index.php на /
  • Правило 2 сводит конечный кратный / к одному /
  • Правило 3 переписывает запросы GET для *.php в *.php/

Правила 4-6 отображают публичные URI на внутренние

  • Правило 4 переписывает /*/yyyy-mm-dd-word в *?s=yyyy-mm-dd-word (примечание № QSA)
  • Правило 5, похоже, пытается переписать /*/staff.php/word в /*/staff.php?s=word, но синтаксис для этого неправильный.
  • Правило 6 заменяет любой трейлинг / на .php при перенаправлении
  • Правило 7 удаляет любой завершающий символ '/', если только uri не является каталогом с index.php (я предполагаю, что вы предполагаете DirectoryIndex index.php (это относится к GoDaddy?)

Это все безнадежно запутано. Вы скрываете или выставляете расширение .php? Потому что правила 3,5 и 6 противоречивы. И правило 5 представляется более логичным, как

RewriteRule ^(.*?)/staff.php/([a-zA-Z0-9\-_]+) $1/staff.php?s=$2 [L]

Вернитесь к чертежной доске и выясните, что вы пытаетесь сделать с вашими правилами htaccess; какой должна быть ваша общедоступная грамматика URI; как выстраиваются ваши сценарии; какие перенаправления вы хотите передать обратно в клиентский браузер, и какие Apache должен обрабатывать как внутренние перезаписи, и какие дополнительные условия необходимы для предотвращения циклического прерывания и пропуска зажигания. Убедитесь, что это имеет смысл, а затем отладьте их, создавая файл .htaccess по одному правилу за раз и используя тестовые запросы для проверки каждого правила по очереди, чтобы проверить, что оно делает.

0 голосов
/ 07 февраля 2013

Попытка добавить следующее в начале вашего файла htaccess. У меня была та же проблема с переписыванием текста для работы на GoDaddy, который работал везде:

Options -Multiviews
...