使用.htaccess删除php扩展

时间:2013-08-07 12:50:22

标签: php css .htaccess

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

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/ 配置文件 /filename.php

每次都会不断添加/profile

如何解决这个问题?

编辑:除了profile.php

之外,所有文件都适用于样式表

5 个答案:

答案 0 :(得分:0)

您可以使用apache的htacessmodrewrite创建它。

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

URL Generation

答案 1 :(得分:0)

你试过这个吗?

RewriteRule ^(.*)$ $1.php

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

答案 2 :(得分:0)

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/abc重定向到www.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]

我们可以将整个脚本创建为例外。这样做很简单。

答案 3 :(得分:0)

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

如果你有一个样式标记,例如... <link rel="stylesheet" type="text/css" href="css/main.css" media="screen" />和一个像<a href="profile">这样的标记,它们将被视为相对网址,因为一开始就没有正斜杠。如果您的浏览器位于/profile.php,它将加载/css/main.css并且链接转到/ profile,但是一旦您处于/ profile,浏览器认为您在该“文件夹”中,所以它现在将查看/profile/css/main.css,您的链接将转至/ profile / profile。你需要制作href的绝对路径,即href =“/ css / main.css”和href =“/ profile”。

答案 4 :(得分:0)

如果您的CSS链接中断了其他内容,请尝试在文档头中使用基本标记:

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

我发现这在处理讨厌的URL重写时起作用。

可能有更好的方法通过.htaccess来解决它,但这可能是一个很好的短期修复,直到发生。