重定向破404页的.htaccess与和正则表达式

问题描述 投票:1回答:1

我已经取消发布在我的网站旧网页。为了避免404页,我想这些页面重定向到一个通用的网页。

因此,例如这个页面:

https://www.portal-gestao.com/artigos/7380-7-t%C3%A1cticas-de-sobreviv%C3%AAncia-%C3%A0-crise-nas-vendas.html

应该重定向到:

https://www.portal-gestao.com/artigos/

我不是很熟练的.htaccess或正则表达式,我有蜜蜂试图将页面重定向有:

RewriteRule ^artigos/(.*)$ /artigos/$1 [R=301,L]

可是,我不工作,谁能帮助?

regex .htaccess joomla
1个回答
0
投票

逾期信息...站点使用Joomla CMS的。请参阅下面的更新。

要重定向不再存在实际上你需要检查该文件不再存在的物理文件的请求,否则它会确实是“重定向一切”(如在评论中提到)。

例如,重定向形式/artigos/<something>的任何请求,不映射到物理文件,以/artigos/你可以做到以下几点:

RewriteEngine On

REwriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(artigos/). /$1 [R=302,L]

$1反向引用只是阻止您不必重复的目录名。

该检查对REDIRECT_STATUS环境的第一个条件是为了确保只有直接请求重定向。这如果你仍然在Apache 2.2(而不是2.4),因为mod_dir将首先执行,改写重定向请求index.php(如果存在的话),并造成了重写循环大概只有必需的。在Apache 2.4,mod_dir后执行。

有302只和改变为301测试,当你确定它工作正常 - 以防止缓存的问题。

您需要在测试前清除浏览器缓存。

然而,404一般会是一个更好的响应。搜索引擎可能会看到重定向到一个共同的根作为软-404和用户更有可能被“迷惑”的时候,他们没有看到他们所要求的信息。

RewriteRule ^artigos/(.*)$ /artigos/$1 [R=301,L]

就其本身而言,这将导致重定向循环,因为它简单地重定向到本身。


更新:它不是一个文件,它是在一个Joomla CMS的文章

如果有效的网址不映射到物理文件,那么你不能在.htaccess做到这一点。在你的情况下,有效的URL是由Joomla CMS的决定(如存储在数据库中的Joomla)。 .htaccess在所述请求的一开始处理,则控制转到PHP /之前的Joomla。在.htaccess指令只能看着HTTP请求和物理文件系统。

的Joomla使用前端控制器图案。所有URL,不映射到物理文件(排除如CSS,JS和图像静态资源),在内部改写为index.php(以下简称“前端控制器”),这有效地“路线”的网址,并决定内容是什么回来。

你所要求只能在一个静态的网站,URL映射到物理文件的文件系统上完成。

您需要执行此重定向中的Joomla本身,当的Joomla已确定请求的URL不存在。 (这实际上更高效无论如何,你只需要执行代码404已经确定之后,而不是在每一个请求,因为这将是,如果你使用.htaccess。)

© www.soinside.com 2019 - 2024. All rights reserved.