我有这个代码将所有.php重定向到无扩展名:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)/$ $1.php
所以/example.php = / example
我希望如果有人点击/example.php,他们会自动以#example结束。
最好的方法是什么?是否将两个链接都视为重复内容?
答案 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]
这被认为是“搜索引擎友好”的重定向方法。