使用.htaccess解决了来自(例如)的网址转换:
(a)http://www.mydomain.ext/dir/myfile.php
为:
(b)http://www.mydomain.ext/dir/myfile
(删除.php)结束。但是如果用户在网页输入中如(a)那样显示网址以便输入。 我如何解决因为(a)网络服务器显示中的打字,如(b)中所示? 我想到了从(a)到(b)的重定向,但不认为它是最好的解决方案,有什么建议可以解决它? 非常感谢您的帮助。
添加: 尝试用一个具体的例子更好地解释这个问题。从.htaccess开始,我有:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php
</IfModule>
我用PHP解决了这个问题:
$default_url = "http://".$_SERVER["HTTP_HOST"].$_SERVER
["REQUEST_URI"]; // display something as: http://www.mysite.ext/dir/filename.php
$canonical_url = str_replace(".php", "", "http://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"]); // display something as: http://www.mysite.ext/dir/filename
if ( $default_url != $canonical_url ) {
header( 'Location: ' . $canonical_url, true, 301 );
}
我要求更新.htaccess代码以集成PHP脚本中描述的功能。我看了很多例子,但没有解决它。 非常感谢。
答案 0 :(得分:1)
要将我的评论转换为答案,请在根目录中使用这些规则.htaccess:
RewriteEngine on
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=301,NE,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]