我有一个现有网站,其中包含带索引的URL中的php。我想将URL更改为不包含PHP,以便将page.php重写为http://example.com/thepage
重写工作正常,但当我尝试使用page.php
尝试访问页面时,重定向会导致“页面无法循环显示”错误我需要弄清楚如何设置重定向并重写网址,因为Google现在已经将PHP网址和漂亮网址编入索引。
我在网上看了无数页,但找不到答案。
请帮忙。
这是我的htaccess
# The redirect below caused a loop when I access the page as
# http://example.com/thepage.php
# Moving the redirect after the rewrite didn't work either.
Redirect 301 /thepage.php http://example.com/thepage
RewriteEngine on
# Rewrite works. The page does display corectly for this link
# http://example.com/thepage
<IfModule mod_rewrite.c>
Options +FollowSymLinks
Options +Indexes
# RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
#RewriteRule ^photos([^\.]+)$ photos [NC,L]
RewriteRule ^([^\.]+)$ $1.php [NC,L]
</IfModule>
ErrorDocument 404 http://example.com/
谢谢
答案 0 :(得分:0)
你的重写规则是从它的声音向后。
在这里,我们将捕获所有不包含句点的php文件,并仅使用不带扩展名的名称将它们重定向到目录URI。 [R=301]
是一个永久性的301重定向,可以告诉该页面不再位于旧位置。
RewriteEngine on
RewriteRule ^([^\.]+).php$ $1 [NC,L,R=301]
您可能希望仅在没有301的情况下使用R
对其进行测试,以确保其正常运行。如果您执行的301重定向不起作用,它将被缓存在最终用户的浏览器缓存中,直到它过期。
Apache有一个extensive reference on remapping URLs with redirects。
答案 1 :(得分:0)
我终于能够回到这个问题并找到了解决方案。我希望这可以帮助别人。我在这个问题上撕裂了我的头发。
我找到了许多例子,但没有找到我需要的组合
#Force non-www:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301,NC]
RewriteBase /
# hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+).php [NC]
RewriteRule ^ %1 [R,L,NC]
# To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]
ErrorDocument 404 http://example.com/