Требуется помощь с .htaccess

Discussion in 'PHP' started by mr.Penguin, 6 Apr 2017.

  1. mr.Penguin

    mr.Penguin Member

    Joined:
    8 Mar 2012
    Messages:
    40
    Likes Received:
    37
    Reputations:
    74
    Привет, друзья! Помогите разобраться с .htaccess
    Есть такой код:
    Code:
    RewriteEngine on
    RewriteBase /
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.php\ HTTP
    RewriteRule ^([^.]+)\.html$ http://site.ru/$1 [R=301,L]
    RewriteCond %{REQUEST_URI} !(\.[^./]+)$
    RewriteCond %{REQUEST_fileNAME} !-d
    RewriteCond %{REQUEST_fileNAME} !-f
    RewriteRule (.*) /$1.php
    
    Этот код убирает расширение .php в конце, например, раньше было так:
    Code:
    http://site.ru/page.php
    Теперь можно страницу открыть и таким образом:
    Code:
    http://site.ru/page
    Собственно вопрос:
    Если добавить слеш в конце названия страницы (site.ru/page/), то открывать не хочет никаким образом(404). То есть путь ведет не к файлу, а ищет .php файл уже в папке page, которого нету вообще. Спасибо за помощь! :)))
     
  2. miniden

    miniden Elder - Старейшина

    Joined:
    20 Oct 2006
    Messages:
    258
    Likes Received:
    34
    Reputations:
    6
    хз, похоже на костыль, но что если так:
    Code:
    RewriteRule (.+)/$ /$1 [L,R=301]
    порезать слыши
    или даже вот так
    Code:
    RewriteCond %{REQUEST_URI} .+/$ [NC]
    RewriteRule ^(.+)(/)$ $1 [L,R=301]
    зы я не оч в хатэаксесах
     
    mr.Penguin likes this.
  3. mr.Penguin

    mr.Penguin Member

    Joined:
    8 Mar 2012
    Messages:
    40
    Likes Received:
    37
    Reputations:
    74
    Code:
    RewriteRule (.+)/$ /$1 [L,R=301]
    
    этот пробовал, слеш убирает, но отказывается видеть файл page.php :(
     
  4. t0ma5

    t0ma5 Reservists Of Antichat

    Joined:
    10 Feb 2012
    Messages:
    828
    Likes Received:
    815
    Reputations:
    90
    имхо так проще
    Code:
    RewriteEngine on
    
    RewriteRule ^([^.]+)\.html$ http://site.ru/$1 [R=301,L]
    RewriteRule ^.*\.php$ - [L]
    RewriteCond %{REQUEST_fileNAME} !-d
    RewriteCond %{REQUEST_fileNAME} !-f
    RewriteRule ^(.*?)(\.php|\/)?$ /$1.php [L]
    
    Code:
    ~$ curl 'http://site/test'
    ok
    ~$ curl 'http://site/test.php'
    ok
    ~$ curl 'http://site/test.html' -I | grep Location
    Location: http://site/test
    ~$ curl 'http://site/test/'
    ok
    ~$ curl 'http://site/test-no'
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>
    <title>404 Not Found</title>
    
     
    _________________________
    #4 t0ma5, 6 Apr 2017
    Last edited: 6 Apr 2017
    miniden and mr.Penguin like this.
  5. mr.Penguin

    mr.Penguin Member

    Joined:
    8 Mar 2012
    Messages:
    40
    Likes Received:
    37
    Reputations:
    74
    да, огонь. Большое спасибо! :))))