原文:http://www.mysite.my/page.php?id=688
使用html func代码:
{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}
启用网址友好选项。
目前,它的工作方式如下:www.mysite.com/item-name123/page.html
。但是,我尝试将page.html$
移至page$
,但仍显示旧链接。我需要重新编写到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的完整代码
答案 0 :(得分:0)
首先,mod重写规则具有下一个结构:RewriteRule Pattern Substitution [flags]
Pattern是perl兼容的正则表达式。
替换重写规则是替换与Pattern匹配的原始URL路径的字符串。
因此,模式中的每个(..)
块都指代替换变量。在你的rewriterule中你有两组括号,但实际网址中只有一个变量,你想要引用它。
此外,您的正则表达式无效。您必须转义某些符号,例如\
或.
。
你重写规则模式必须至少像这样:
^([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]并告诉我结果。
奇怪的是,我的代码对你没有帮助。试过这个,这对我有用。无论是旗帜还是没有旗帜(没有旗帜,他将我重新定向到替换页面。