Как правильно связать сокращенный URL в htaccess?

0

Оригинал: 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

http://textuploader.com/t458

  • 1
    Возможный дубликат Как удалить .html из URL
  • 0
    Вы должны понимать, что является переменной в вашем запросе. Я не понимаю это сейчас. У вас есть этот шаблон: ^([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-я группа не была захвачена.
Теги:
.htaccess
mod-rewrite

1 ответ

0

Во-первых, правило 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] в конце каждой строки и рассказать мне о результате.

Странно, что мой код вам не помог. Просто попробовал это, и это сработало для меня. Оба с флагом и без флага (без флага он перенаправил меня на страницу из подстановки.

  • 0
    Приятно видеть ваш ответ. Но тот код, который вы предоставили, не работает. он выдает эту ошибку: «Кроме того, при попытке использовать ErrorDocument для обработки запроса была обнаружена ошибка 500 Internal Server Error».
  • 0
    Во-первых, я обновил свой код везде. Кроме того, я попробовал это правило на своем локальном хосте, и оно работает правильно. Можете ли вы предоставить полный код вашего файла .htaccess ?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню