Два параметра для перезаписи URL в HTACCESS - PullRequest
1 голос
/ 16 октября 2019

Я работаю над простым пятистраничным веб-сайтом с блогом. Это первый раз, когда я использую .htaccess, чтобы правильно переписать свои URL-адреса для оптимизации, оптимизированной для SEO.

Два параметра, которые я пытаюсь разрешить посетителю, это sitename.com / blog / category/ WORD или sitename.com / blog / SLUG . Если / категория / слово используется, я бы хотел, чтобы он перечислял все сообщения с выбранным словом категории. Если используется / slug (короткое название поста, например, "Learn-How-to-Code"), я бы хотел, чтобы он просто показывал этот конкретный пост.

Вот мой старый .htaccess:

RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

Первоначально он работал нормально для отдельных страниц, таких как sitename.com / about , sitename.com / contact и т. Д., Но каждый раз, когда я пыталсяsitename.com/blog/SLUG или sitename.com/blog/category/WORD просто перенаправит на страницу блога. Я повторяю $ _GET ['category'] и $ _GET ['slug'] в blog.php, чтобы проверить его, но он ничего не показал.

Просматривая несколько постов здесь, я понял, чтоМне нужно было добавить несколько отдельных строк, чтобы просто проверить используемый блог и указать соответствующие параметры.

Вот мой текущий .htaccess:

RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^blog/([^\.]+)$ blog.php?slug=$1 [NC,L]
RewriteRule ^blog/category/([^\.]+)$ blog.php?category=$1 [NC,L]
RewriteRule ^([^\.]+)$ $1.php [NC,L]

Имя sitename. com / blog / SLUG работает нормально, но каждый раз, когда я делаю sitename.com / blog / category / WORD , он показывает "category / WORD" как слаг, а не разбивает его на категориюслово.

Я что-то здесь не так делаю? Есть ли лучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 16 октября 2019

Простое объяснение без технической поддержки - для лучшего разъяснения

Line1 RewriteRule ^blog/([^\.]+)$ blog.php?slug=$1 [NC,L] Line2 RewriteRule ^blog/category/([^\.]+)$ blog.php?category=$1 [NC,L]

в строке 1 вы выполняете проверку регулярного выражения с помощью кода ([^\.]+) после URL blog и в строке 2ваш url является своего рода жестко закодированной частью category, а затем вы делаете regular expression check

, поэтому в простой работе обычный движок никогда не переходит к строке 2 кода, потому что он уже стал частью строки 1. уже проверено и передано regular expression часть, так что category становится частью

простой совет: всегда сначала сохраняйте части с твердым URL и regular expression parts правила в конце.

1 голос
/ 16 октября 2019

Вам нужно поменять строки в блоге. Поскольку первый использует флаг L, вы, по сути, говорите, чтобы он прекратил использовать другие правила, поэтому в вашем случае он уже выбирает $ 1 в качестве категории / WORD.

Я не знаю, как остальныевашего бэкэнда настроен, но вы также можете изучить маршрутизацию всего через страницу индекса.

...