Оригинал: http://www.mysite.my/page.php?id=688
С html func code:
{capture name=some_content assign=page_url}
{if $seo_settings.enable_mod_rewrite}{seo->makeDetailsLink p1='$v.id' p2='$v.title'}{else}{$live_site}/page.php?id={$v.id}{/if}
{/capture}
После включения URL-адреса.
В настоящее время он работает следующим образом: www.mysite.com/item-name123/page.html
. Однако я попытался удалить page.html$
на page$
но он все еще отображает старую ссылку. и мне нужно переписать ссылку на URL-адрес на сайт www.site.com/item-name123/page
, чтобы она работала.
Как я могу преобразовать его в www.site.com/page/item-name123
и после щелчка по тексту автоматически найдет точно такую ссылку: www.site.com/page/item-name123
?
Текущие коды:
RewriteRule ^([0-9]+)-([^\/]+)?/page.html$ page.php?id=$1 [nc,qsa]
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
Обновлено: abc
до item-name123
(для лучшего понимания)
Полный код.htaccess
Во-первых, правило mod rewrite имеет следующую структуру: RewriteRule Pattern Substitution [flags]
Шаблон - это регулярное выражение, совместимое с perl.
Подстановка правила перезаписи - это строка, которая заменяет исходный URL-путь, который был сопоставлен с шаблоном.
Таким образом, каждый (..)
блок в шаблоне ссылается на переменную в подстановке. В вашей перезаписке у вас есть две группы скобок, но только одна переменная в реальном URL, к которой вы хотите обратиться.
Кроме того, ваше регулярное выражение недопустимо. Вам нужно избежать некоторых символов, таких как \
или .
,
Вы должны переписать шаблон правила, по крайней мере, так:
^([0-9]+)-([^\/]+)?\/page\.html$
Ответьте на свой вопрос. Я предполагаю, что это сработает:
RewriteRule ^page/?$ index.php?action=page_action
[L]
How can I transform it to be "www.site.com/page/abc"
Использовать это:
RewriteRule ^page/([A-Za-z0-9-]+)/?$ index.php?action=page_action&page=$1 [L] // $1 refers to (..) in pattern
ОБНОВИТЬ
Попытайтесь добавить флаг [L] в конце каждой строки и рассказать мне о результате.
Странно, что мой код вам не помог. Просто попробовал это, и это сработало для меня. Оба с флагом и без флага (без флага он перенаправил меня на страницу из подстановки.
.htaccess
?
^([0-9]+)-([^\/]+)?/page.html$
. Предоставленный вами URL (item-name123/page.html
) не соответствует этому регулярному выражению. Это будет соответствовать:1-item/page.html
или этому:123-sdfdfs
, а также этому:1-/page.html;
но не ваш URL. Это правило будет работать для вашего URL:RewriteRule ^(?:[A-Za-z0-9]+-)?([0-9]+)/page.html$ page.php?id=$1 [nc,qsa]
. Не то, чтобы 1-я группа не была захвачена.