我正在尝试更新我的.htaccess文件,目标是将所有响应“找不到404文件”的页面 - 错误重写到另一个网址。
实施例: 我有这三个链接:
404 :domain.com/category1/123-article-name.html
正常工作:domain.com/static-page/10-ways-to-destroy-your-webpage.html
未触及:domain.com/simple-website.html
在这种情况下,应将第一个链接重定向到 domain.com/lost/123-article-name.html , 第二个已经完成了。第三个链接永远不会受到我的规则的影响。
希望你们能帮助我。对我来说,这真的很难解决! 谢谢!
修改
RewriteRule ^(.*)/([0-9]+)-(.+).html$ lost/$2-$3.html [L]
这是我到目前为止所做的,但这条规则有点“愚蠢”,因为它不会测试所请求页面是否存在。
答案 0 :(得分:0)
您的规则和CMS的规则是互斥的。
第41行(你的规则)只有在文件存在时才会执行,因为如果文件不存在(第38行和第39行的rewriteConds),服务器会尝试返回index.php?page=path_name
,这将产生404错误。
如果您知道缺少的类别/目录的名称,则按照第10行到第35行,然后您可以将规则应用于包含它们的网址。
RewriteRule ^(Ausbildung|Ausland|Berufswelt)/(?=.+-)(.+).html$ lost/$2.html
原始答案
您可以通过添加重写条件来测试文件或目录是否存在
RewriteCond %{REQUEST_FILENAME} !-f # True if the request isn't a file
RewriteCond %{REQUEST_FILENAME} !-d # True if the request isn't a directory
RewriteRule ^.*/([0-9]+)-(.+).html$ lost/$2-$3.html [L]
#not I removed the first capture group because it is unnecessary.
旁注:在您的示例中,因为+
在正则表达式中是贪婪的,所以捕获的域为domain.com/category1/123-article-name.html
哪个有效,但可能会人为地限制你。您可以更改规则以包含前瞻性:
RewriteRule ^.*/(?=.+-)(.+).html$ lost/$1.html
(?=.+-)
告诉正则表达式引擎为任意数量的字符创建匹配项,如果找到至少一个-
你应该查看这个htaccess test,它真棒!