У меня возникли проблемы с пониманием этого файла .htaccess, который я унаследовал при своем новом задании. Я - разработчик графического дизайнера/маркетолога. На нашем сайте есть куча ошибок дублирования, и я хочу переименовать наши ссылки и перенаправить их 301.301 перенаправление динамических cgi сгенерированных URL-адресов с использованием .htaccess
Это первая часть файла .htaccess:
RewriteEngine Off
RewriteCond %{HTTP_HOST} !^blog.asseenontvhot10.com$ [NC]
RewriteCond %{REQUEST_URI} !/sitemap\.xml
AddType text/html .shtml, .html, .htm
AddHandler server-parsed .shtml, .html, .htm
AddHandler application/x-httpd-php5 .html .htm .shtml
#Options FollowSymLinks Includes -Indexes
Из того, что я понимаю, что первая часть связывает наш блог на основной сайт, и я не уверен, что делает следующая строка. Линия addtype и те, которые следуют, позволяют .htaccess читать/записывать эти типы файлов?
Вот та часть, я считаю уместным и то, что мне нужно изменить:
RewriteEngine on
rewritecond %{http_host} ^[^.]+\.[^.]+$ [nc]
rewriterule ^(.*)$ http://www.%{http_host}/$1 [r=301,nc]
RewriteRule default.html /home.html
RewriteRule contact\.html /cgi-bin/commerce.cgi?display=contact
RewriteRule about\.html /cgi-bin/commerce.cgi?display=about
RewriteRule register\.html /cgi-bin/commerce.cgi?register=action
RewriteRule products\.html /cgi-bin/commerce.cgi?listcategories
RewriteRule parent_category/(.*)/(.*)/ /cgi-bin/commerce.cgi?listcategories=action&parent=$1
RewriteRule category/(.*)/(.*)/(.*)\.html /cgi-bin/commerce.cgi?search=action&category=$1&page=$3
RewriteRule category/(.*)/(.*)/ /cgi-bin/commerce.cgi?search=action&category=$1
RewriteRule category/(.*).html /cgi-bin/commerce.cgi?search=action&page=$1
RewriteRule product/(.*)/(.*)/ /cgi-bin/commerce.cgi?preadd=action&key=$1
RewriteRule basket\.html /cgi-bin/commerce.cgi?display=basket
RewriteRule log-in\.html /cgi-bin/commerce.cgi?login
RewriteRule home\.html /cgi-bin/commerce.cgi?display=home
RewriteRule search\.html /cgi-bin/commerce.cgi?display=search
RewriteRule all-items\.html /cgi-bin/commerce.cgi?search
RewriteRule update_user\.html /cgi-bin/commerce.cgi?displayuser=action
RewriteRule order_history\.html /cgi-bin/commerce.cgi?orderhistory
RewriteRule logout\.html /cgi-bin/commerce.cgi?logout
RewriteRule specials\.html /cgi-bin/commerce.cgi?search=action&keywords=nav_specials
Я знаю, что первая часть сил WWW. и перенаправляет 301, хотя я не видел этого способа выполнить его в любом руководстве, которое я прочитал. Первое, что мне действительно нужно изменить делает домашнюю страницу 301 перенаправление с: http://www.asseenontvhot10.com/cgi-bin/commerce.cgi?display=home в http://www.asseenontvhot10.com/
Насколько я могу сказать RewriteRule делает этот вариант, но dosn't заставить его. Будет ли добавлено [r = 301] к концу работы перезаписывания? Я также прочитал, что есть код, который нужно добавить для .cgi, чтобы работать как .php, но я полностью потерялся там.
Update: Я попытался добавить эту строку в нижней части -
Redirect 301 /cgi-bin/commerce.cgi?display=home/
, и я получил ошибку 500.
второе обновление: Я добавил этот код:
RewriteRule about\.html /cgi-bin/commerce.cgi?display=about
RewriteCond %{QUERY_STRING} ^display=about$
RewriteRule ^cgi-bin/commerce\.cgi$ /about [R=301]
И 404'd. Когда я заменил файл .htaccess резервной копией и страницей еще 404 ... Теперь я действительно в недоумении и не знаю, как вернуть сайт. Я даже не знаю, где перенаправление будет храниться вне файла htaccess после его возврата.
третье обновление: (делая прогресс) Я добавил этот код:
RewriteRule about\.html /cgi-bin/commerce.cgi?display=about
RewriteCond %{QUERY_STRING} ^display=about$
RewriteRule ^cgi-bin/commerce\.cgi$ /about\.html? [R=301]
, и я получил цикл перенаправления. Это было, наконец, перенаправление на about.html, который я думал, что первое правило переименовано в /cgi-bin/commerce.cgi?display=about, но оно перенаправлено на него снова и снова.
'Добавить *' не имеет ничего общего с переписыванием. это просто говорит apache, какие типы определенных расширений файлов. например 'AddType text/html .exe' позволит вам называть ваши .html-файлы как .exe вместо этого, и они будут обрабатываться как html, а не исполняемые файлы. –
и '[r = 301]' просто сообщает движку rewrite выполнить переадресацию на стороне клиента, а не просто перезаписывать на сервере –
Итак, мое правило типа добавления сообщает серверу, чтобы он служил .html-файлам в виде .shtml. html или .htm? Есть ли причина для этого, например, совместимость с Mac? Что касается перенаправления, добавив [r = 301] в конец правила, чтобы браузеры и поисковые роботы перенаправляли ссылки cgi на чистую ссылку? –