Переписать частичный URL на определенную страницу с помощью .htaccess mod_rewrite - PullRequest
0 голосов
/ 28 августа 2018

Не могу найти название для этого, так что это не самое лучшее, извините.

Я хочу переписать URL-адреса следующим образом:

https://awesomechristianmusic.com/song-list?artist=dc-talk

Чтобы выглядеть так:

https://awesomechristianmusic.com/dc-talk

Или для жанров / тем:

https://awesomechristianmusic.com/song-list?genre=rock
https://awesomechristianmusic.com/song-list?topic=forgiveness

Чтобы выглядеть так:

https://awesomechristianmusic.com/genre/rock
https://awesomechristianmusic.com/topic/forgiveness

К сожалению, с моим файлом .htaccess, похоже, есть некоторые проблемы, и я не могу это выяснить. Вот с чем я работаю:

RewriteEngine on
RewriteBase /

# Force HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,QSA,R=301]

# Remove www.
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ https://%1/$1 [R=301,L,QSA]

# Remove trailing slashes
RewriteCond %{REQUEST_URI} ^.*/$
RewriteRule ^(.*)/$ https://%{HTTP_HOST}/$1 [R=301,L,QSA]

# This is where I'm currently working
RewriteRule ^/([^/]+)$ /song-list?artist=$1 [NC,L,QSA]
RewriteRule ^/genre/([^/]+)$ /song-list?genre=$1 [NC,L,QSA]
RewriteRule ^/topic/([^/]+)$ /song-list?topic=$1 [NC,L,QSA]

# Redirect everything through index.php
RewriteCond %{REQUEST_URI} !(/(api|edit)/?.*) [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [NC,L,QSA]

# long list of 301 redirects

В настоящее время три переписывания, над которыми я работаю, ничего не делают. Если я удаляю косые черты в начале их регулярных выражений, я получаю 500 Внутренняя ошибка сервера. Есть идеи, что может пойти не так или как это исправить?

1 Ответ

0 голосов
/ 28 августа 2018

Поменяйте местами эти три правила:

# This is where I'm currently working
RewriteRule ^/([^/]+)$ /song-list?artist=$1 [NC,L,QSA]
RewriteRule ^/genre/([^/]+)$ /song-list?genre=$1 [NC,L,QSA]
RewriteRule ^/topic/([^/]+)$ /song-list?topic=$1 [NC,L,QSA]

К этим трем правилам:

# If not /genre/* and not /topic/*
# Convert /dc-talk to /song-list?artist=dc-talk
RewriteCond %{REQUEST_URI} !^/genre/(.*)$ [NC]
RewriteCond %{REQUEST_URI} !^/topic/(.*)$ [NC]
RewriteRule ^(.*)$ song-list?artist=$1 [NC,L,QSA]

# Convert /genre/rock to /song-list?genre=rock
RewriteRule ^genre/(.*)$ song-list?genre=$1 [NC,L,QSA]

# Convert /topic/forgivenessto /song-list?topic=forgiveness
RewriteRule ^topic/(.*)$ song-list?topic=$1 [NC,L,QSA]

Вы можете просмотреть эти правила в действии здесь: https://htaccess.madewithlove.be/?share=763f7107-f056-5ebe-ae0a-7f53a17b225a

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