隐藏扩展和重定向url与扩展


hide extension and redirect url with extension

我有这个代码,重定向所有的。php到没有扩展名:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}'.php -f 
RewriteRule ^(.*)/$ $1.php

所以/example.php =/example

我希望它,如果有人点击/example.php,他们会自动结束在/example代替。

最好的方法是什么?将有两个链接工作被认为是重复的内容?

试试这个:

RewriteEngine On
# if requested .php file directly, then redirect to extension-less URL
# (do it on initial rewrite iteration only)
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.+)'.php$ /$1 [R=301,L]
# Your "add .php file extension" rule goes below

这种方法的问题是%{ENV:REDIRECT_STATUS}变量可能不被您的Apache设置/配置填充/支持。不幸的是,我不知道需要做些什么才能使它工作。


如果上面的不起作用,试试这个解决方法——它会起作用,但不是那么"好",在某些情况下可能会失败(查询字符串值是这里的弱点):

RewriteEngine On
# if requested .php file directly, then redirect to extension-less URL
# (do it on initial rewrite iteration only)
RewriteCond %{THE_REQUEST} ^[A-Z]+'s.+'.php'sHTTP/.+
RewriteRule ^(.+)'.php$ /$1 [R=301,L]
# Your "add .php file extension" rule goes below

重写条件在这个规则中是重要的——没有它,你将有一个无尽的重定向循环,你的浏览器将在某个点中止(除非它不够聪明(或者请求是由一些编码不良的bot完成的),这样的过程必须手动终止)。

如果你将这样的重定向规则放在"add .php文件扩展名"规则的上方或下方并不重要——我只是更喜欢将所有301重定向放在靠近顶部的位置。

您可以执行301 "永久移动"重定向,它通知客户端所请求的资源已经移动,并且在新的位置可用。要使用RewriteRule做到这一点,请在规则规范中添加[R=301,L]标志,例如:

RewriteRule ^(.*)/$ $1.php [R=301,L]

这被认为是"搜索引擎友好"的重定向方法。