我一直在抽空。 它在服务器迁移之前工作!
好吧,基本上就是这样简单:
我有一个.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]