我一直在为这件事出风头。它在服务器迁移之前就开始工作了!
好的,基本上是这样简单的:
我有一个.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]然而,灾难已经降临,现在它造成了一个重定向循环。
从逻辑上讲,我只能假设在这个版本的Apache中,它会被绊倒,因为它看到正在运行的脚本是.php版本,所以它再次尝试重定向。
我该怎么做才能让它起作用呢?或者我需要在WHM中切换配置?
谢谢!!
发布于 2013-09-24 02:27:59
您的.htaccess应该是这样的:
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文件,使其友好,然后使用内部重定向。
发布于 2015-09-13 22:19:33
完全相同的.htaccess文件将根据其放置的位置不同而工作不同,因为“最后的标记”意味着不同的位置。在...conf中,Last意味着所有的处理都完成了,所以退出,但是在.htaccess中,完全相同的最后标记意味着从这个文件的顶部开始。
若要在将代码块从...conf移动到.htaccess时按预期工作,大多数.htaccess文件将需要这些调整中的一个或另一个:
*
RewriteCond %{ENV:REDIRECT_STATUS} !^[\s/]*$
RewriteRule ^ - [L]https://stackoverflow.com/questions/18971996
复制相似问题