htaccess не работает переписать правило на живом сервере - PullRequest
0 голосов
/ 17 апреля 2019

Я не очень хорош в написании правил переписывания. Я хочу сделать правило перезаписи для URL вида

url: domain.com/albums.php to url: domain.com/albums

работает отлично, но, когда я нажимаю на конкретный альбом, не переписываю ниже URL

url: domain.com/albums/album-name

он застрял и снова показывает все альбомы. мое правило перезаписи htaccess -

RewriteRule ^albums/([A-Za-z0-9-]+)?$     /album-gallery.php?albumURL=$1 [NC,L]

RewriteRule ^albums$     /album.php [NC,L]

1 Ответ

0 голосов
/ 17 апреля 2019

Попробуйте с этим:

Options -MultiViews

# To externally redirect without .php
RewriteCond %{THE_REQUEST} \s/+(.+)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=301,L,NE]

RewriteRule ^albums/([A-Za-z0-9-]+)?$     /album-gallery.php?albumURL=$1 [NC,L]

# To internally rewrite to .php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]

Документы Apache по mod_negotiation описывают, что делает опция Multiviews, когда она включена:

Если сервер получает запрос на / some / dir / foo, а / some / dir / foo - нет существует, то сервер читает каталог, ища все файлы с именем foo. *, и эффективно подделывает карту типов, которая называет все эти файлы, назначая им те же типы медиа и контент-кодировки было бы, если бы клиент попросил одного из них по имени. Тогда выбирает лучшее соответствие требованиям клиента и возвращает, что документ.

Так что в вашем случае вы должны отключить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...