首页 文章

http重定向仅使用htaccess更新网址

提问于
浏览
1

使用.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 回答

  • 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]
    

相关问题