.htaccess Казалось бы, игнорирование выбранных правил перезаписи, но не всех - PullRequest
0 голосов
/ 10 октября 2019

Фон:

  1. Запуск Apache 2.4 на Centos7
  2. Мои правила перезаписи и перенаправления находятся в файле .htaccess в корневом каталоге веб-сайта
  3. Сейчас Multiviews установлен на +, но попробовал оба + и -.

Что я пытаюсь сделать:

Я хотел бысделать что-то, как объяснено здесь 1018 *, которое удаляет расширения файлов и заменяет их косой чертой в URL браузера. В этом случае .php и .html.

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

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

RewriteEngine On уже установлен, а это не такпервым делом на моем .htacess - должно ли это быть? Вот верхняя часть моего файла корневого каталога .htaccess. У меня есть Multiviews и другие вещи, такие как индексы, установленные на уровне конфигурации (httpd.conf).

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

#redirects all www to non www 
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

#redirect index.php and index.html to / via https://www.smartlabsoftware.com/howto/redirect-index-page.htm
   #
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*index\.(html|php)?\ HTTP/
    RewriteRule ^(.*)index\.(html|php)?$ https://mywebsite.com/$1 [R=301,L]

#this code does not work and breaks rewrite rules below it
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]
##

Проблемы Я столкнусь, если я включу блок кода, который я перечислилво-первых:

  • что-то с множественными представлениями, где index.php для / перезаписи больше не работает.
  • без добавленной косой черты
  • расширение .php никогда не исчезает
  • другие правила переписывания ниже в моем файле перестают работать.

Что мне нужно сделать:

.php или .html, чтобы бытьудален и для добавления косой черты. Например:

  • mywebsite.com / contact / staff.php, если требуется, следует загрузить как mywebsite.com/contact/staff/
  • mywebsite.com / contact / staff, еслизапрашиваемый должен загружаться как mywebsite.com/contact/staff/
  • mywebsite.com / contact / index.php, если запрашивается, должен загружать mywebsite.com/contact/
  • Для работы правил перезаписиНапример,
        RewriteRule   ^elderlaw/?$              radio/minute-type.php?id=3 [R=301,NC,L]

Дополнительная проблема

Даже если я не пытаюсь добавить блок кода выше, мои RewriteRules работают, только если я этого не сделаювключите флаги в скобки []. Так что мой RewriteRule на самом деле выглядит следующим образом

        RewriteRule   ^elderlaw/?$              radio/minute-type.php?id=3 

Если я включу флаги, он просто перенаправляет на мою веб-страницу вместо перезаписи URL.

Да, я перезапускаю apache каждый раз, да, яочищаю кеш браузера каждый раз при тестировании. У меня включен mod_rewrite, и мой RewriteEngine включен.

Есть идеи? Я перепробовал так много вещей.

...