首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有简单htaccess规则的重定向循环

具有简单htaccess规则的重定向循环
EN

Stack Overflow用户
提问于 2013-09-24 02:24:34
回答 2查看 7K关注 0票数 1

我一直在为这件事出风头。它在服务器迁移之前就开始工作了!

好的,基本上是这样简单的:

我有一个.php文件,我想通过ReWrite规则查看使用SEO友好URL的内容。

此外,为了规范化和防止重复的内容,我想301个.php版本的SEO友好版本。

这是我在新服务器上一直使用并一直使用的内容:

代码语言:javascript
复制
RewriteRule ^friendly-url/$ friendly-url.php [L,NC]
RewriteRule ^friendly-url.php$ /friendly-url/$1 [R=301,L]

然而,灾难已经降临,现在它造成了一个重定向循环。

从逻辑上讲,我只能假设在这个版本的Apache中,它会被绊倒,因为它看到正在运行的脚本是.php版本,所以它再次尝试重定向。

我该怎么做才能让它起作用呢?或者我需要在WHM中切换配置?

谢谢!!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-24 02:27:59

您的.htaccess应该是这样的:

代码语言:javascript
复制
Options +FollowSymLinks -MultiViews 

RewriteEngine On
RewriteBase /

# To externally redirect /friendly-url.php to /friendly-url/
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(friendly-url)\.php [NC]
RewriteRule ^ /%1/? [R=302,L]

## To internally redirect /anything/ to /anything.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
RewriteRule ^(.+?)/$ $1.php [L]

请注意我是如何使用R=302的,因为我不希望在我的浏览器上缓存规则,直到我按预期确认它的工作状态,然后,一旦我能够确认它的正常工作,我就从R=302切换到R=301

请记住,自使用R=301以来,您可能也从以前的尝试中缓存过它,因此您最好尝试从其他浏览器访问它,以确保其工作正常。

然而,灾难已经降临,现在它造成了一个重定向循环。

它会导致重定向循环,因为您将其重定向到自己,与我的代码不同的是,我捕获请求,并从那里重定向php文件,使其友好,然后使用内部重定向。

票数 3
EN

Stack Overflow用户

发布于 2015-09-13 22:19:33

完全相同的.htaccess文件将根据其放置的位置不同而工作不同,因为“最后的标记”意味着不同的位置。在...conf中,Last意味着所有的处理都完成了,所以退出,但是在.htaccess中,完全相同的最后标记意味着从这个文件的顶部开始。

若要在将代码块从...conf移动到.htaccess时按预期工作,大多数.htaccess文件将需要这些调整中的一个或另一个:

  • 将最后的标志更改为结束。(问题是,END标志仅在更新的2.3.9版本和更高版本的Apache中可用,在早期版本中甚至不会“后退”。)
  • 在每个.htaccess文件的顶部添加这样的样板代码:

*

代码语言:javascript
复制
RewriteCond %{ENV:REDIRECT_STATUS} !^[\s/]*$
RewriteRule ^ - [L]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18971996

复制
相关文章

相似问题

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