Мои правила создаются с помощью бесплатных онлайн-инструментов.Они работают нормально, пока некоторые из специальных символов, таких как & / - , не появятся в url в качестве параметра GET.Я хочу получить чистую и оптимизированную для SEO ссылку.
Я нашел похожие вопросы, я пытался решить мою проблему с помощью регулярных выражений и флагов, когда люди отвечали, но это все равно не работает.
Как обрабатывать специальные символы, такие как & и / в правилах .htaccess?
Параметр GET не работает с правилами htaccess
... и многие другие ответы.
Мой htaccess
RewriteEngine On
RewriteRule ^all-books$ /bookIndex.php [L]
RewriteRule ^year/([^/]*)$ /bookIndex.php?year=$1 [L]
RewriteRule ^find-by-first-letter/([^/]*)$ /bookIndex.php?letter=$1 [L]
RewriteRule ^books-online/([^/]*)/about-book$ /book.php?book=$1 [L]
Вот как я его использую.
Страницы и коды:
page: https://example.com/bookIndex.php
url / a href: https://example.com/all-books
Rule: `RewriteRule ^all-books$ /bookIndex.php [L]`
та же страница с параметрами GET
url: https://example.com/year/[YEAR HERE]
link: echo "<a href=\"https://example.com/year/".$row["year"]."\">".$row["year"]."</a>";
Rule: RewriteRule ^year/([^/]*)$ /bookIndex.php?year=$1 [L]
url: https://example.com/find-by-first-letter/[FIRST LETTER HERE]
link: echo "<a href=\"https://example.com/find-by-first-letter/".$row1["letter"]."\">".$row1["letter"]."</a>";
Rule: RewriteRule ^find-by-first-letter/([^/]*)$ /bookIndex.php?letter=$1 [L]
Здесь можно использовать регулярные выражения, поскольку параметр GET может содержать только первую букву или цифры.Я не уверен насчет флага, я думаю, с флагом все в порядке.
Страница и коды, где проблема
page: https://example.com/book.php
url: https://example.com/books-online/[TITLE HERE]/about-book
link: <a href=\"https://example.com/books-online/".str_replace(' ', '-', $row2['title'])."/about-book\">".$row2['title']."</a>
RewriteRule ^books-online/([^/]*)/about-book$ /book.php?book=$1 [L]
Если $row2['title']
= "Книга" `все работает нормально, но в следующих случаях
$row2['title'] = "K-9000"
$row2['title'] = "24/7"
$row2['title'] = "You & Me"
Я получаю сообщение об ошибке «Страница перенаправляется неправильно» в браузере.Я понятия не имею, почему rexeg из других ответов не работает, мне нужно RewriteCond% {QUERY_STRING} ?
А как насчет моего способа изменения пробелов в url в "-" с помощью str_replace(' ', '-', $row2['title'])
>?
Я уверен, что теперь это был неправильный путь, потому что мне нужно изменить пробелы обратно, чтобы получить исходный заголовок для базы данных поиска, в то время как заголовок может быть " K-9000", я не получу никакого результата.
Должен ли я использовать htaccess для этого, верно?