用简单的htaccess规则redirect循环

我一直在抽空。 它在服务器迁移之前工作!

好吧,基本上就是这样简单:

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

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

这是我使用,并一直在新的服务器上工作到现在:

RewriteRule ^friendly-url/$ friendly-url.php [L,NC] RewriteRule ^friendly-url.php$ /friendly-url/$1 [R=301,L] 

然而,灾难已经袭来,现在它会导致redirect循环。

从逻辑上讲,我只能假定在这个版本的Apache中,它正在跳闸,因为它正在运行的脚本是.php版本,所以它再次尝试redirect。

我怎样才能重新工作,使其工作? 或者是否有我需要在WHM切换的configuration?

谢谢!!

这是你的.htaccess应该是这样的:

 Options +FollowSymLinks -MultiViews RewriteEngine On RewriteBase / # To externally redirect /friendly-url.php to /friendly-url/ RewriteCond %{THE_REQUEST} ^[AZ]{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文件,使之友好,然后使用内部重定向。

完全相同的.htaccess文件将根据放置的位置而有所不同,因为[L] ast标志意味着取决于位置的不同。 在… conf中,[ast]意味着所有已完成的处理都会退出,但在.htaccess中完全相同的[L] ast标志表示从此文件的顶部开始遍布整个文件

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

  • 将[L] ast标志更改为[结束]。 (问题是[END]标志只在更新版本2.3.9和更高版本的Apaches中可用,甚至在早期版本中甚至不会“退后”)。

  • 在每个.htaccess文件的顶部添加这样的样板代码:

*

 RewriteCond %{ENV:REDIRECT_STATUS} !^[\s/]*$ RewriteRule ^ - [L]