首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要.htaccess帮助:不存在的urls 301重定向到404,而不是提供直接的404

问需要.htaccess帮助:不存在的urls 301重定向到404,而不是提供直接的404
EN

Stack Overflow用户
提问于 2017-09-07 23:50:52
回答 2查看 385关注 0票数 3

我的joomla网站有点问题。首先,它会创建带和不带尾部斜杠的urls的副本。因此,我实现了一些htaccess代码来强制使用尾随斜杠。然后它导致了软404,也就是说,如果我进入一个不存在的页面,我的爬虫中的状态实际上是这些不存在的页面的200,但它只是一个404页面模板。不是硬的404。所以我在"error.php“文件中对其进行了更改。

然而,问题是,当我输入任何不存在的url时,比如"domain.com/nonexistentpage“(没有尾随的斜杠),它会首先通过301规则将其重定向到"domain.com/nonexistentpage/”,然后返回一个404。

如果我停止页面的重定向,那么相同的URL "domain.com/nonexistentpage“会像预期的那样返回一个硬性的404,但是URL不会重定向到尾部的斜杠版本(我需要)。然而,如果我重定向它,它将在404ing之前是301。

我的网站上没有任何没有斜杠的页面,所以我希望所有不存在的页面都直接转到我的"error.php“文件中,并且不受301规则的约束。我该怎么做呢?这是我的代码尝试

代码语言:javascript
复制
RewriteCond %{REQUEST_URI} !-d 
RewriteCond %{REQUEST_URI} !-f 
RewriteRule .? - [S=1] 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ http://www.domainxyz.com/$1/ 
RewriteRule .+ - [L]

我对htaccess非常缺乏经验。其想法是,如果文件不存在,则应忽略斜杠重写规则。

EN

回答 2

Stack Overflow用户

发布于 2017-09-08 18:58:07

如果你换个角度来看,我想你说的是:

如果REQUEST_FILENAME is a file or directory

  • REQUEST_URI G29 aREQUEST_FILENAME斜杠

,则文件或目录不具有尾随的斜杠

然后301连接到相同的URL,尾部带有斜杠...

翻译过来就是:

代码语言:javascript
复制
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d 
RewriteCond %{REQUEST_URI} !.*/$
RewriteRule ^(.*)$ /$1/ [R=301,L]

因为[OR]优先于隐式的,并且重写条件基本上被读取为(#1 OR #2) AND #3

尽管你原来的方法只做了一个小小的调整:

代码语言:javascript
复制
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .? - [S=1]
RewriteRule ^(.*[^/])$ /$1/ [R=301,L]

只需去掉最后重写条件并稍微更改规则,使其仅在没有尾部斜杠时才匹配。

票数 0
EN

Stack Overflow用户

发布于 2017-09-18 15:18:49

还是没能解决这个问题。我确实注意到了一件事。如果我将.html扩展添加到每个页面,那么这些重定向规则就会起作用。也就是存在的和不存在的文件被htaccess和相应的规则正确地分开。但如果我让它们保持原样,并以正斜杠结尾,那么我是否先添加一个条件来检查文件或目录是否真实都无关紧要。他们都重定向,然后它404s不存在的urls,但不是立即404……我不明白问题是什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46100589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档