我正在编写脚本,并希望将链接设置如下:
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
之外,所有文件都适用于样式表答案 0 :(得分:0)
答案 1 :(得分:0)
你试过这个吗?
RewriteRule ^(.*)$ $1.php
只需用这个替换你当前的规则
答案 2 :(得分:0)
www.mysite.com/sign-up.php
至www.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/abc
至www.mysite.com/profile/profile.php?username=abc
问题是,第一个脚本会将string
重定向到string.php
,以便www.mysite.com/profile/abc
重定向到www.mysite.com/profile/abc.php
或www.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来解决它,但这可能是一个很好的短期修复,直到发生。