http重定向仅使用htaccess更新URL

时间:2016-08-18 17:42:32

标签: apache .htaccess redirect

使用.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脚本中描述的功能。我看了很多例子,但没有解决它。 非常感谢。

1 个答案:

答案 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]