如何在htaccess中提供正确的链接缩短URL的方法?

时间:2014-04-16 14:53:20

标签: html .htaccess mod-rewrite

原文: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

已更新:abcitem-name123(为了更好地理解)


.htaccess的完整代码

http://textuploader.com/t458

1 个答案:

答案 0 :(得分:0)

首先,mod重写规则具有下一个结构:RewriteRule Pattern Substitution [flags]

Pattern是perl兼容的正则表达式。

替换重写规则是替换与Pattern匹配的原始URL路径的字符串。

source

因此,模式中的每个(..)块都指代替换变量。在你的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]并告诉我结果。

奇怪的是,我的代码对你没有帮助。试过这个,这对我有用。无论是旗帜还是没有旗帜(没有旗帜,他将我重新定向到替换页面。