Как я могу изменить файл .htaccess и получить SEO дружественные URLS вместо строки запроса. Я хочу достичь этих 3 целей:
На другом посту @нубхава мне очень помог, и это то, что я имею сейчас для второго момента:
RewriteEngine on RewriteBase /example # external redirect from actual URL to pretty one RewriteCond %{THE_REQUEST} /products(?:\.php)?\?id=([^\s&]+) [NC] RewriteRule ^ products/%1? [R=302,L,NE] # internal forward from pretty URL to actual one RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^products/([^/]+)/?$ products.php?id=$1 [L,QSA]
Второй пункт работает правильно, но я хочу знать, где я должен поставить другие правила до или после. Я применил это право после другого правила, но оно не работает, потому что оно перенаправляется на предыдущий url localhost / example / products / 38 / :
# external redirect from actual URL to pretty one RewriteCond %{THE_REQUEST} /products(?:\.php)?\?id=([^\s&]+)\?color=([^\s&]+) [NC] RewriteRule ^ products/%1/%2? [R=302,L,NE] # internal forward from pretty URL to actual one RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^products/([^/]+)/([^/]+)/?$ products.php?id=$1&color=$2 [L,QSA]
Вам понадобится новый набор правил для 2-х параметров:
RewriteEngine on RewriteBase /example/ # external redirect from actual URL to pretty one RewriteCond %{THE_REQUEST} /products(?:\.php)?\?id=([^\s&]+)&color=([^\s&]+) [NC] RewriteRule ^ products/%1/%2/? [R=302,L,NE] RewriteCond %{THE_REQUEST} /products(?:\.php)?\?id=([^\s&]+)\s [NC] RewriteRule ^ products/%1/? [R=302,L,NE] RewriteCond %{REQUEST_FILENAME} -d [OR] RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^ - [L] # internal forward from pretty URL to actual one RewriteRule ^products/([^/]+)/?$ products.php?id=$1 [NC,L,QSA] RewriteRule ^products/([^/]+)/([^/]+)/?$ products.php?id=$1&color=$2 [NC,L,QSA] RewriteRule ^products/?$ products-list.php [L,NC]