我一直把它拉出来。它在服务器迁移之前有效!
好的,基本上它就像这样简单:
我有一个.php文件,我希望通过重写规则查看使用SEO友好URL的内容。
另外,为了规范化和防止重复内容,我想将.php版本改为SEO友好版本。
这是我使用过的,并且一直在新服务器上工作:
RewriteRule ^friendly-url/$ friendly-url.php [L,NC]
RewriteRule ^friendly-url.php$ /friendly-url/$1 [R=301,L]
然而,灾难已经发生,现在它会导致重定向循环。
逻辑上我只能假设在这个版本的Apache中它正在绊倒,因为它看到正在运行的脚本是.php版本,所以它再次尝试重定向。
如何重新使用它以使其工作?或者是否需要切换WHM?
谢谢!
答案 0 :(得分:2)
这就是.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
,因为我不希望规则在我的浏览器上缓存,直到我确认其按预期工作,然后,一旦我能确认其按预期工作,我就会从{{{ 1}}到R=302
。
请注意,自从您使用R=301
以来,您之前的尝试也可能已被缓存,因此您最好尝试从其他浏览器访问它,以确保其正常工作。
然而,灾难已经发生,现在它会导致重定向循环。
它会导致重定向循环,因为您将其重定向到自身,我的代码的不同之处在于我捕获请求,并从那里重定向php文件以使其友好,然后使用内部重定向。
答案 1 :(得分:2)
完全相同的.htaccess文件将根据放置位置的不同而有所不同,因为[L] ast标志意味着根据位置的不同而有所不同。在...... conf中,[L] ast意味着所有已完成的处理因此退出,但在.htaccess中,完全相同的[L] ast标志意味着从此文件的顶部开始。
要将代码块从... conf移动到.htaccess时按预期工作,大多数.htaccess文件将需要这些调整中的一个或另一个:
将[L] ast标志更改为[END]。 (问题是,[END]标志仅在更新的[版本2.3.9及更高版本] Apaches中可用,并且在早期版本中甚至没有"后退"。
< / LI>在每个.htaccess文件的顶部添加这样的样板代码:
*
RewriteCond %{ENV:REDIRECT_STATUS} !^[\s/]*$
RewriteRule ^ - [L]