隐藏扩展名并使用扩展名重定向网址

时间:2011-09-11 19:04:02

标签: php .htaccess mod-rewrite redirect

我有这个代码将所有.php重定向到无扩展名:

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

所以/example.php = / example

我希望如果有人点击/example.php,他们会自动以#example结束。

最好的方法是什么?是否将两个链接都视为重复内容?

2 个答案:

答案 0 :(得分:2)

试试这个:

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

此方法的问题是Apache设置/配置可能无法填充/支持%{ENV:REDIRECT_STATUS}变量。不幸的是,我不知道需要做些什么才能让它发挥作用。


如果以上方法不起作用,请尝试此解决方法 - 它会起作用但不是“好”并且在某些情况下可能会失败(查询字符串值是这里的弱点):

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

此规则中的重写条件非常重要 - 如果没有它,您将拥有无限的重定向循环,您的浏览器将在某个时刻中止(除非它不够智能(或请求由某些人完成)编码不好的机器人)并且必须手动杀死这个过程。

如果您将此类重定向规则放在“添加.php文件扩展名”规则的上方或下方,这并不重要 - 我只是希望将所有301重定向保持在最靠近顶部。

答案 1 :(得分:0)

您可以执行301“永久移动”重定向,通知客户端所请求的资源已移动并且可在新位置使用。要使用RewriteRule执行此操作,请在规则规范中添加[R=301,L]标记,例如:

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

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