Переписать правило в .htacess из URL с одинаковым знаком и коротким именем папки - PullRequest
0 голосов
/ 03 декабря 2018

Мне нужно правило перезаписи в моем .htaccess для следующего примера URL:

https://www.example.com/book=18ABCDEFG 

Вот тот URL-адрес, который мне нужен:

https://www.example.com/books/2018/ABCDEFG.pdf

Я потратил паручасов гуглил и пытался решить это, но я действительно застрял.Если бы там был мастер переписывания, я был бы очень признателен за помощь.

РЕДАКТИРОВАНИЕ:

Это то, что я придумал до сих пор, но единственныйрезультат - 404 (не найдено):

RewriteEngine on
RewriteCond %{QUERY_STRING} ^book=18(.*)$
RewriteRule ^(.*)book=(.*)$ http://www.examplesite.com/books/2018/$1.pdf [R=301,L]

Я надеялся, что $1 должен ссылаться на строку после "18", так как единственная группа в скобках в условии содержит эту строку, но пока яЯ не нашел правильный синтаксис.

Я должен объяснить и о «18».Теперь URL-адреса отличаются и никогда не будет другого года, кроме 2018 года, для URL-адресов книг с этим шаблоном.Так что это может быть жестко запрограммировано.

Но как мне ссылаться на строку после «18» в правиле перезаписи?

1 Ответ

0 голосов
/ 04 декабря 2018

Это то, что я придумал до сих пор, но единственный результат - 404 (не найдено):

RewriteEngine on
RewriteCond %{QUERY_STRING} ^book=18(.*)$
RewriteRule ^(.*)book=(.*)$ http://www.examplesite.com/books/2018/$1.pdf [R=301,L]

Как уже упоминалось в комментариях, это пытаетсясопоставлять два разных URL-адреса одновременно: один, где информация содержится в строке запроса (после «мнимого» * ​​1006 *), и другой, где информация содержится в URL-пути.Так что, вероятно, он ничего не делает;следовательно, 404.

Я надеялся, что $1 должен ссылаться на строку после "18", поскольку единственная группа в скобках в условии содержит эту строку

$1 относится к первой группе в скобках в шаблоне RewriteRule (из которых их две).Если вы хотите сопоставить первый подшаблон в последнем сопоставленном условии , то вам нужно использовать обратную ссылку вида %1.

Однако в вашем примере не содержится ?и, следовательно, нет строки запроса.Информация вместо этого содержится в URl-пути.(Если это не опечатка в вашем вопросе ?! Это похоже на опечатку, поскольку = в противном случае является излишним. Но это также полностью изменит ваш вопрос.)

Для перенаправления URL example.com/book=18ABCDEFG (т. е. информация в URL-пути), тогда вам может понадобиться что-то вроде следующего в верхней части вашего .htaccess файла в корне документа:

RewriteEngine on
RewriteRule ^book=18([^/]+)$ /books/2018/$1.pdf [R=302,L]

Если код может содержать только определенные символы, тогдарегулярное выражение должно быть соответственно конкретным.В его нынешнем виде он соответствует практически всем.

Тест с 302 (временными) перенаправлениями и только 301 (постоянный), когда вы уверены, что он работает нормально (если предполагается, что он является постоянным). перенаправляет и кэширует браузер).

Перед тестированием вам необходимо очистить кэш браузера.

...