0

我正在尝试使用目标更新我的 .htaccess 文件,即所有会响应“404 文件未找到”错误的页面都被重写到另一个 url。

示例:我有这 3 个链接:

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]

这是我到目前为止所得到的,但这条规则有点“愚蠢”,因为它不会测试所请求的页面是否存在。

4

1 回答 1

0

您的规则和 CMS 的规则是互斥的。

第 41 行(您的规则)只会在文件存在时执行,因为如果文件不存在(第 38 和 39 行的 rewriteConds),那么服务器会尝试返回index.php?page=path_name,这将生成 404 错误。

如果您知道第 10 到 35 行中缺少的类别/目录的名称,那么您可以将规则应用于其中包含它们的 url。

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 捕获的组

  • 123条
  • 姓名

哪个有效,但可能会人为地限制您。您可以更改规则以包括积极展望:

RewriteRule ^.*/(?=.+-)(.+).html$ lost/$1.html

如果(?=.+-)找到至少一个字符,则告诉正则表达式引擎为任意数量的字符创建匹配项-

你应该看看这个htaccess 测试,太棒了!

于 2013-07-31T14:13:10.353 回答