Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 如何给出在htaccess中链接缩短URL的正确方法?_Html_.htaccess_Mod Rewrite - Fatal编程技术网

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
文件的完整代码?