0

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

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 外,所有文件都可以与样式表一起正常工作

4

5 回答 5

0

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

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

于 2013-08-07T13:00:31.980 回答
0

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

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

网址生成

于 2013-08-07T12:53:24.563 回答
0

你试过这个吗?

RewriteRule ^(.*)$ $1.php

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

于 2013-08-07T12:55:16.717 回答
0

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

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

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

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

于 2013-08-07T13:41:19.930 回答
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

问题是,第一个脚本将重定向stringstring.phpso www.mysite.com/profile/abctowww.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]

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

于 2013-08-07T12:57:14.210 回答