Html 如何给出在htaccess中链接缩短URL的正确方法?
原件:Html 如何给出在htaccess中链接缩短URL的正确方法?,html,.htaccess,mod-rewrite,Html,.htaccess,Mod Rewrite,原件:http://www.mysite.my/page.php?id=688 带有html函数代码: {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友好选项后。
http://www.mysite.my/page.php?id=688
带有html函数代码:
{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 rule有下一个结构:
RewriteRule模式替换[flags]
模式是与perl兼容的正则表达式
重写规则的替换是替换模式匹配的原始URL路径的字符串
所以,模式中的每个(..)
块都引用替换中的变量。在重写规则中,有两组括号,但实际url中只有一个变量,即您要引用的内容
此外,正则表达式无效。您必须转义一些符号,如\
或
重写规则模式必须至少如下所示:
^([0-9]+)-([^\/]+)?\/page\.html$
回答你的问题。我认为这会起作用:
RewriteRule^page/?$index.php?action=page\u 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-9]+)-([^\/]+)?/page.html$
.URL,您提供的(item-name123/page.html
)与此regexp不匹配。这将匹配:1-item/page.html
或此:123 SDFDF
,以及此:1-/page.html;
,但不匹配您的url。此规则适用于您的url:重写规则^(?[A-Za-z0-9]+-)?([0-9]+)/page.html$page.php?id=$1[nc,qsa]
。并不是说第一组是不可捕获的。很高兴看到您的回复。但您提供的代码不起作用。它会出现此错误“此外,在尝试使用ErrorDocument处理请求时遇到500内部服务器错误。”首先,我在所有地方都更新了代码。此外,我在本地主机上尝试了此规则,它工作正常。您能否提供.htaccess
文件的完整代码?