Ответы пользователя по тегу htaccess
  • Почему .htaccess не перенаправляет robots.txt?

    shambler81
    @shambler81 Куратор тега htaccess
    так а с чего ты решил что .htaccess на него вообще распространяется ?
    Самое простое объяснение у тебя стоит nginx+apache и статика обрабатываетя nginx
    В таком случае тебе редирект нужно будет писать в nginx
    Ответ написан
    Комментировать
  • Как заставить Apache или Yii отдавать 404 без 301?

    shambler81
    @shambler81 Куратор тега htaccess
    Вопрос старый и реторический, это не имеет отношение к движку.
    ЭТо имеет отношение к парсеру кода ответа сервера, берет он последовательность кодов или последний.
    По факту конечная 404 действительно отдаст несуществующую страницу и поисковик поймет что ее нет и пометит ее несуществующей, но сам урл редиректа может не моменить поскольку он отдает валидный ответ сервера.
    Проверять в .htaccess код ответа можно но тем самым при каждом хите вам н ужно дождаться ответа сервера и только после этого вообще что-то произойдет. А посточнное динамичное перечтение этого файла может потенциально добавить гемороя.
    ТАк что проверить код ответа через .htaccess я бы не рекомендовал.
    и ТАК ЧТО МОЖНО СДЕЛАТЬ.
    Первое это настроить трай файл и тд в nginx там для этого более богатый инструментарий да и коды ответа сервера он читает на лету, уж всяко получше чем в .htaccess
    второе если с той стороны 404 то нахрена вам туда вести ?
    если они там появляются динамически решите проблему у своего движка.
    Ответ написан
    Комментировать
  • Как перенаправить запросы в htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    Если тебе нужно перенаправить при условие
    если не 404
    и
    и
    то
    То тебе не поможет .htaccess в принципе поскольку получить код ответа сервера нужно до перенаправления, из чего следует что при любом урле на сайте прийдется получить код ответа сервера. что в свою очередь сильно повлияет на производительность сайта.
    А следовательно это не тот вариант
    Самый легкий вариант решения проблемы с условием на 404
    это в 404.php написать реврайты уже на php, они и пишутся легче и циклы у них менее странные.
    В таком случае редиректы будут работать только если урл не найдет.

    Теперь по твоей регулярке
    ты наксячил
    вопервых последовательность RewriteCond /your/docroot/%{REQUEST_FILENAME} !-f
    во вторых собственно сама переменная.

    RewriteCond %{REQUEST_URI} ^(.*)/dir1/(.*)$ 
    # если строка содержит /dir1/ 
    RewriteRule ^(.*)$ %1/dir2/%2 [R=301,L] 
    #Перенаправить все урлы с начинающиеся с dir1 на dir2 с сохранением дальнейшей структуры URL
    Ответ написан
  • Как настроить 301-й ссылки с параметрами?

    shambler81
    @shambler81 Куратор тега htaccess
    на каждую ссылка найдется своя ссылка.
    https://donatstudios.com/RewriteRule_Generator
    классические 301 не видит гет параметра в принципе, он не является частью урла
    Ответ написан
    Комментировать
  • Как сделать rewrite URLs как это делает Wordpress?

    shambler81
    @shambler81 Куратор тега htaccess
    html тоже кстати далек от идиала
    лучше всего так /catalog/
    Ответ написан
    Комментировать
  • Kак сделать чтобы часть урл в чпу с htaccess начиналась после другой но кроме той же самой?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteCond %{REQUEST_URI} !/lang/en/.*$
    RewriteRule ^lang/(.*)/$ index.php?dir=main〈=$1


    RewriteCond %{REQUEST_URI} !/blog/.*$
    RewriteRule blog$ index.php?dir=blog	[L]


    ! - отрицание
    RewriteCond -если
    Ответ написан
    Комментировать
  • Как сделать редирект 404 для мульти-язычного сайта?

    shambler81
    @shambler81 Куратор тега htaccess
    Положи в нее свой .htaccess
    Ответ написан
    Комментировать
  • Объясните нормальным языком что такое RewriteBase?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteBase /
    # Без директивы (.*) = /$1 будет /var/wwww/site/web/$1 с директивой = /$1
    Ответ написан
    Комментировать
  • Что значит регулярное выражение в .htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    %1 - переменная с конда
    $1 из самого реврайт рула
    Ответ написан
    Комментировать
  • 301 редирект на сайте?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteCond %{REQUEST_URI} ^(.*)/dir1/(.*)$ 
    # если строка содержит /dir1/ 
    RewriteRule ^(.*)$ %1/dir2/%1 [R=301,L] 
    #Перенаправить все урлы с начинающиеся с dir1 на dir2 с сохранением дальнейшей структуры URL
    Ответ написан
    Комментировать
  • Перенаправленние htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    Ответ написан
    Комментировать
  • Как объединить регулярные выражения в одно?

    shambler81
    @shambler81 Куратор тега htaccess
    гыгы прикольно, для начала немного отдебажем твое художество.

    ############################################################################
    #### Cтандартный .htaccess для проектов студии Клондайк, версия 2.3     ####
    ############################################################################
    RewriteEngine On
       #  Директива включает редиректы.
    RewriteBase / 
       # Без директивы (.*) = /$1 будет /var/wwww/site/web/$1  с директивой  = /$1
    Options +FollowSymLinks
       # Разрешает переход по символическим ссылкам.
    
    ############################################################################
    #### Перенаправляем протокол https на http                              ####
    ############################################################################
    RewriteCond %{HTTPS} on
       # Проверяем наличие https в URL.
    RewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI}
       # Перенаправляем протокол на http.
    
    ############################################################################
    #### Выбор основного зеркала (или с www или без www)                    ####
    ############################################################################
       # 1. Редирект с www на без www. (раскоментировать директивы пункта 1)
    #RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
       # Проверяем, содержит ли домен www (в начале URL).
    #RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
       # Перенаправляем URL на домен без www.
    ####
       # 2. Редирект без www на www. (раскоментировать директивы пункта 2)
    #RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
       # Проверяем, не содержит ли домен www (в начале URL).
    #RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
       # Перенаправляем URL на домен c www.
    
    ############################################################################
    #### Убираем повторяющиеся слеши (/) в URL                              ####
    ############################################################################
    RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$
       # Проверяем, повторяется ли слеш (//) более двух раз.
    RewriteRule . %1/%2 [R=301,L]
       # Исключаем все лишние слеши.
    
    ############################################################################
    #### Убираем слеши в конце URL для статических файлов (содержит точку)  ####
    ############################################################################
    RewriteCond %{REQUEST_URI} \..+$  
       # Если файл содержит точку.
    RewriteCond %{REQUEST_FILENAME} !-d   
       # И это не директория.
    RewriteCond %{REQUEST_FILENAME} -f
       # Является файлом.
    RewriteCond %{REQUEST_URI} ^(.+)/$      
       # И в конце URL есть слеш.
    RewriteRule ^(.+)/$ /$1 [R=301,L]     
       # Исключить слеш.
    
    ############################################################################
    #### Добавляем слеш(/), если его нет, и это не файл.                    ####
    ############################################################################
    RewriteCond %{REQUEST_URI} !(.*)/$
       # Если слеша в конце нет.
    RewriteCond %{REQUEST_FILENAME} !-f
       # Не является файлом.
    RewriteCond %{REQUEST_URI} !\..+$
       # В URL нет точки (файл).
    RewriteRule ^(.*)$ $1/ [L,R=301]
       # Добавляем слеш в конце.
    
    ############################################################################
    #### Убираем index.php, если он есть в конце URL                        ####
    ############################################################################
    RewriteCond %{REQUEST_METHOD} =GET
       # Выявляем GET запрос в URL (не POST).
    RewriteCond %{REQUEST_URI} ^(.*)/index\.php$
       # URL cодержит index.php в конце.
    RewriteRule ^(.*)$ %1/ [R=301,L]
       # Удалить index.php из URL.
    
    ############################################################################
    #### Конец общей части, далее следует собственные директивы .htaccess   ####
    ############################################################################
    Ответ написан
  • Apache2 rewrite. Как переделать?

    shambler81
    @shambler81 Куратор тега Linux
    используй отрицание.
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP_HOST} !^(www\.|)test\.site\.ru$ [NC]
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
    Ответ написан
  • Как правильно объединить в htaccess два редиректа в один (http->https и index.php)?

    shambler81
    @shambler81 Куратор тега htaccess
    ############################################################################
    #### Cтандартный .htaccess для проектов студии Клондайк, версия 2.3     ####
    ############################################################################
    RewriteEngine On
       #  Директива включает редиректы.
    RewriteBase / 
       # Без директивы (.*) = /$1 будет /var/wwww/site/web/$1  с директивой  = /$1
    Options +FollowSymLinks
       # Разрешает переход по символическим ссылкам.
    
    ############################################################################
    #### Перенаправляем протокол https на http                              ####
    ############################################################################
    RewriteCond %{HTTPS} on
       # Проверяем наличие https в URL.
    RewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI}
       # Перенаправляем протокол на http.
    
    ############################################################################
    #### Выбор основного зеркала (или с www или без www)                    ####
    ############################################################################
       # 1. Редирект с www на без www. (раскоментировать директивы пункта 1)
    #RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
       # Проверяем, содержит ли домен www (в начале URL).
    #RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
       # Перенаправляем URL на домен без www.
    ####
       # 2. Редирект без www на www. (раскоментировать директивы пункта 2)
    #RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
       # Проверяем, не содержит ли домен www (в начале URL).
    #RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
       # Перенаправляем URL на домен c www.
    
    ############################################################################
    #### Убираем повторяющиеся слеши (/) в URL                              ####
    ############################################################################
    RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$
       # Проверяем, повторяется ли слеш (//) более двух раз.
    RewriteRule . %1/%2 [R=301,L]
       # Исключаем все лишние слеши.
    
    ############################################################################
    #### Убираем слеши в конце URL для статических файлов (содержит точку)  ####
    ############################################################################
    RewriteCond %{REQUEST_URI} \..+$  
       # Если файл содержит точку.
    RewriteCond %{REQUEST_FILENAME} !-d   
       # И это не директория.
    RewriteCond %{REQUEST_FILENAME} -f
       # Является файлом.
    RewriteCond %{REQUEST_URI} ^(.+)/$      
       # И в конце URL есть слеш.
    RewriteRule ^(.+)/$ /$1 [R=301,L]     
       # Исключить слеш.
    
    ############################################################################
    #### Добавляем слеш(/), если его нет, и это не файл.                    ####
    ############################################################################
    RewriteCond %{REQUEST_URI} !(.*)/$
       # Если слеша в конце нет.
    RewriteCond %{REQUEST_FILENAME} !-f
       # Не является файлом.
    RewriteCond %{REQUEST_URI} !\..+$
       # В URL нет точки (файл).
    RewriteRule ^(.*)$ $1/ [L,R=301]
       # Добавляем слеш в конце.
    
    ############################################################################
    #### Убираем index.php, если он есть в конце URL                        ####
    ############################################################################
    RewriteCond %{REQUEST_METHOD} =GET
       # Выявляем GET запрос в URL (не POST).
    RewriteCond %{REQUEST_URI} ^(.*)/index\.php$
       # URL cодержит index.php в конце.
    RewriteRule ^(.*)$ %1/ [R=301,L]
       # Удалить index.php из URL.
    
    ############################################################################
    #### Конец общей части, далее следует собственные директивы .htaccess   ####
    ############################################################################
    Ответ написан
    Комментировать
  • Как сделать подмену на другой файл в .htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    Редирект на файл должен работатЬ, а вот если у вас nginx+apache то явно нет.
    Вам нужно будет писать редирект в самом nginx поскольку запросы к файлу не доходят до апачь в принципе.
    Попробуйет для начала так.

    RewriteRule ^robots\.txt$ /folder/robots.txt?&%{QUERY_STRING}

    или
    RewriteRule ^robots\.txt$ /folder/robots.txt? [L,R=301]
    Ответ написан
  • Как сделать переадресацию на страницу 404 если страница не существует через htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    Если вам нужно сделать банальную 404 то действительноErrorDocument 404 /404.html
    Если вам нужно будет включить это в RewriteCond %{REQUEST_URI}
    то никак. Только в nginx. Да и то сомнительное удовольствие.
    Ответ написан
    Комментировать
  • 301 редирект в .htaccess после переноса сайта?

    shambler81
    @shambler81 Куратор тега htaccess
    если страницы имеют вес то вам и нужно ставлять так как они есть, редирект не передает весь вес, а толко часть. Так что если вас это лично не смущяет то лучше сохранить урлы.
    Ответ написан
    Комментировать
  • Как удалить слеш из URI в htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    Нет немного сложней нужно еще учесть файлы 
    которым требуется наоборот его убирать и тд. В низу расписаны частные случаи. 
    Рекомендую  поставить весь кусок.
    
    ############################################################################
    #### Cтандартный .htaccess для проектов студии Клондайк, версия 2.3     ####
    ############################################################################
    RewriteEngine On
       #  Директива включает редиректы.
    RewriteBase /
       # Без директивы (.*) = /$1 будет /var/wwww/site/web/$1  с директивой  = /$1
    Options +FollowSymLinks
       # Разрешает переход по символическим ссылкам.
    
    ############################################################################
    #### Перенаправляем протокол https на http                              ####
    ############################################################################
    RewriteCond %{HTTPS} on
       # Проверяем наличие https в URL.
    RewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI}
       # Перенаправляем протокол на http.
    
    ############################################################################
    #### Выбор основного зеркала (или с www или без www)                    ####
    ############################################################################
       # 1. Редирект с www на без www. (раскоментировать директивы пункта 1)
    #RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
       # Проверяем, содержит ли домен www (в начале URL).
    #RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
       # Перенаправляем URL на домен без www.
    ####
       # 2. Редирект без www на www. (раскоментировать директивы пункта 2)
    #RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
       # Проверяем, не содержит ли домен www (в начале URL).
    #RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
       # Перенаправляем URL на домен c www.
    
    ############################################################################
    #### Убираем повторяющиеся слеши (/) в URL                              ####
    ############################################################################
    RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$
       # Проверяем, повторяется ли слеш (//) более двух раз.
    RewriteRule . %1/%2 [R=301,L]
       # Исключаем все лишние слеши.
    
    ############################################################################
    #### Убираем слеши в конце URL для статических файлов (содержит точку)  ####
    ############################################################################
    RewriteCond %{REQUEST_URI} \..+$
       # Если файл содержит точку.
    RewriteCond %{REQUEST_FILENAME} !-d
       # И это не директория.
    RewriteCond %{REQUEST_FILENAME} -f
       # Является файлом.
    RewriteCond %{REQUEST_URI} ^(.+)/$
       # И в конце URL есть слеш.
    RewriteRule ^(.+)/$ /$1 [R=301,L]
       # Исключить слеш.
    
    ############################################################################
    #### Добавляем слеш(/), если его нет, и это не файл.                    ####
    ############################################################################
    RewriteCond %{REQUEST_URI} !(.*)/$
       # Если слеша в конце нет.
    RewriteCond %{REQUEST_FILENAME} !-f
       # Не является файлом.
    RewriteCond %{REQUEST_URI} !\..+$
       # В URL нет точки (файл).
    RewriteRule ^(.*)$ $1/ [L,R=301]
       # Добавляем слеш в конце.
    
    ############################################################################
    #### Убираем index.php, если он есть в конце URL                        ####
    ############################################################################
    RewriteCond %{REQUEST_METHOD} =GET
       # Выявляем GET запрос в URL (не POST).
    RewriteCond %{REQUEST_URI} ^(.*)/index\.php$
       # URL cодержит index.php в конце.
    RewriteRule ^(.*)$ %1/ [R=301,L]
       # Удалить index.php из URL.
    ############################################################################
    #### Сжание контента  под требование гугла                        ####
    ############################################################################
    
    <IfModule mod_deflate.c>
      # Compress HTML, CSS, JavaScript, Text, XML and fonts
      AddOutputFilterByType DEFLATE application/javascript
      AddOutputFilterByType DEFLATE application/rss+xml
      AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
      AddOutputFilterByType DEFLATE application/x-font
      AddOutputFilterByType DEFLATE application/x-font-opentype
      AddOutputFilterByType DEFLATE application/x-font-otf
      AddOutputFilterByType DEFLATE application/x-font-truetype
      AddOutputFilterByType DEFLATE application/x-font-ttf
      AddOutputFilterByType DEFLATE application/x-javascript
      AddOutputFilterByType DEFLATE application/xhtml+xml
      AddOutputFilterByType DEFLATE application/xml
      AddOutputFilterByType DEFLATE font/opentype
      AddOutputFilterByType DEFLATE font/otf
      AddOutputFilterByType DEFLATE font/ttf
      AddOutputFilterByType DEFLATE image/svg+xml
      AddOutputFilterByType DEFLATE image/x-icon
      AddOutputFilterByType DEFLATE text/css
      AddOutputFilterByType DEFLATE text/html
      AddOutputFilterByType DEFLATE text/javascript
      AddOutputFilterByType DEFLATE text/plain
      AddOutputFilterByType DEFLATE text/xml
    
      # Remove browser bugs (only needed for really old browsers)
    #  BrowserMatch ^Mozilla/4 gzip-only-text/html
    #  BrowserMatch ^Mozilla/4\.0[678] no-gzip
    #  BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
    #  Header append Vary User-Agent
    </IfModule>
    <IfModule mod_expires.c>
      ExpiresActive on
      ExpiresByType image/jpeg "access plus 3 day"
      ExpiresByType image/gif "access plus 3 day"
      ExpiresByType image/png "access plus 3 day"
      ExpiresByType text/javascript "access plus 3 day"
      ExpiresByType text/css "access plus 3 day"
      ExpiresByType application/javascript "access plus 3 day"
    </IfModule>
    ############################################################################
    #### Конец общей части, далее следует собственные директивы .htaccess   ####
    ############################################################################
    Ответ написан
    Комментировать
  • Apache 2.4 mod_rewrite почему не работает проверка на наличие файла?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteCond %{REQUEST_URI} ^/([^/]+)/thumb/([^/]+)(/.+)?/(.+)\.(jpe?g|png|gif|svgz?|tiff?)$ - точно работает ?

    может так
    RewriteCond %{REQUEST_URI} ^([^/]+)/thumb/([^/]+)(/.+)?/(.+)\.(jpe?g|png|gif|svgz?|tiff?)$

    Да и вообще у тебя чет многовато начала строк

    Дай лучше список реальных ссылок покрасивше сделаем.
    Ответ написан
    Комментировать
  • Как сформировать окончание url перенаправленной страницы?

    shambler81
    @shambler81 Куратор тега htaccess
    Используй отрицание !
    RewriteCond %{REQUEST_URI} !^ekonomia/svyaz/svyaz.*$ [NC]
    RewriteRule ^ekonomia/svyaz/?(.*)$ http://site.ru/svyaz/$1 [R=301,L]
    Ответ написан
    Комментировать