【问题标题】:remove php extension using .htaccess使用 .htaccess 删除 php 扩展
【发布时间】:2023-03-18 17:10:01
【问题描述】:

我正在编写脚本,并希望将链接设置如下:

www.mysite.com/sign-up.php
to
www.mysite.com/sign-up

www.mysite.com/profile.php?username=abc
to
www.mysite.com/profile/abc

我找到了这段代码并为我工作。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.+)$ $1.php [L,QSA]

但是当我想访问时:

www.mysite.com/profile/abc

样式表不起作用,它的路径似乎已更改。此外,该配置文件中的所有链接都变成这样:

www.mysite.com/profile/profile/filename.php

每次都会不断添加/profile

如何解决这个问题?

编辑:除了 profile.php 之外,所有文件都可以在样式表中正常工作

【问题讨论】:

  • “样式表不起作用”不是问题描述。由于这个问题很常见,我会告诉你解决方案是什么 - 使用 absolute 路径到你的样式表。您收到 404 错误,因为您使用的是相对错误。使用浏览器的开发者控制台自行获取这些信息。

标签: php css .htaccess


【解决方案1】:

你可以用apache的htacessmodrewrite来创建。

只需检查以下链接即可生成动态 URL。它可能会解决您的问题:

URL Generation

【讨论】:

  • 谢谢你帮助我!我可能会将链接更改为其他内容。
【解决方案2】:

你试过了吗?

RewriteRule ^(.*)$ $1.php

只需用这个替换你当前的规则

【讨论】:

    【解决方案3】:

    这不是你的重写规则的问题,而是你的 href 的问题。

    如果您有...<link rel="stylesheet" type="text/css" href="css/main.css" media="screen" /> 之类的样式标签和<a href="profile"> 之类的a 标签,它们将被视为相对URL,因为开头没有正斜杠。如果您的浏览器位于/profile.php,它将加载/css/main.css 并且链接转到/profile,但是一旦您位于/profile,浏览器就会认为您在那个“文件夹”中,所以它现在会查看/profile/css/main.css,您的链接将转到/profile/profile。您需要创建 href 的绝对路径,即 href="/css/main.css" 和 href="/profile"。

    【讨论】:

    • 谢谢,但所有其他文件都可以在相同的样式路径下正常工作。只有 profile.php 有问题
    【解决方案4】:

    如果您的 CSS 链接因其他原因而损坏,请尝试在文档头部中使用基本标签:

    <head>
    <base href="http://www.mysite.com/" />
    </head>
    

    我发现这在处理讨厌的 URL 重写时很有效。

    可能有更好的方法通过 .htaccess 来解决它,但这可能是一个不错的短期解决方案,直到发生这种情况。

    【讨论】:

      【解决方案5】:

      www.mysite.com/sign-up.phpwww.mysite.com/sign-up

         RewriteEngine on
         RewriteRule ^(.*)$ $1.php [r=301,L]
      

      需要将此文件保存到文件夹www.mysite.com/profile/.htaccess

         RewriteEngine on /profile/
         RewriteRule ^(.*)$ profile.php?username=$1 [r=301,L]
      

      www.mysite.com/profile/abcwww.mysite.com/profile/profile.php?username=abc

      问题是,第一个脚本会将string 重定向到string.php 所以www.mysite.com/profile/abcwww.mysite.com/profile/abc.phpwww.mysite.com/profile/profile.php?username=abc.php。我们必须创建一个异常:

         RewriteEngine on
         RewriteRule ^profile/(.*)$ profile.php?username=$1 [r=301,L]
         RewriteRule ^(.*)$ $1.php [r=301,L]
      

      我们可以将整个脚本创建为一个例外。这将简单地完成所有工作。

      【讨论】:

      猜你喜欢
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      • 2023-03-22
      相关资源
      最近更新 更多