【问题标题】:redirecting with mod-rewrite使用 mod-rewrite 重定向
【发布时间】:2023-04-05 07:00:02
【问题描述】:

我从here 中获取以下规则并对其进行了修改(非常少),因此它在删除 php 文件扩展名后添加了一个斜杠。

RewriteEngine on

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

所以网址 Domain.com/file.php 看起来像 Domain.com/file/

只要我有链接或直接输入 Domain.com/file/,它就可以正常工作,但我想保留所有指向我的 php 文件的链接。因此,如果有人访问 Domain.com/file.php

,我希望它将某人重定向到 Domain.com/file/

但是当我尝试重定向时(如果我这样做正确的话)

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)/$ $1.php [R=301,L]

但它不会重定向。 :(

我不确定我的重定向是否正确,或者我是否根本不允许这样做。任何建议都很棒。

【问题讨论】:

    标签: .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    我不完全确定它是如何与 htaccess 一起工作的,但你总是可以只使用 php。 将此文件设为文件并将其包含在所有页面的顶部:

    <?php    
      $page = substr($_SERVER["SCRIPT_NAME"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1);
      if(substr($page, -4)=='.php'){
        $pageURL = 'http';
        if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
          $pageURL .= "://";
        if ($_SERVER["SERVER_PORT"] != "80") {
          $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"];
        } else {
          $pageURL .= $_SERVER["SERVER_NAME"];
        }
        header( "Location: $pageURL/" + substr($page, 0, -4)  );
      }
    ?>
    

    编辑:如果您不关心用户在地址栏中看到的内容,只需添加一个 [R](尝试去掉 =301,L 部分)

    【讨论】:

    • 感谢您的回答!...但我真的很想使用 .htaccess,因为这样我就不必编辑每个文件(这是我想要重定向的唯一原因,或者我不妨更改所有我的链接)
    • 它不起作用(我在使用 R=301,L 之前尝试过),然后再次尝试。
    猜你喜欢
    • 2011-05-06
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多