[英]remove php extension using .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外,所有文件均可与样式表配合使用
你有尝试过吗?
RewriteRule ^(.*)$ $1.php
只需用此规则替换您当前的规则
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]
我们可以创建整个脚本作为例外。 这将简单地完成所有工作。
这不是您的重写规则的问题,而是您的href的问题。
如果您有一个样式标签,例如... <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”。
如果您的CSS链接断开了,请尝试使用文档头中的base标签:
<head>
<base href="http://www.mysite.com/" />
</head>
我发现这在处理讨厌的URL重写时有效。
可能有更好的方法可以通过.htaccess解决此问题,但这可能是一个不错的短期解决方案,直到这种情况发生。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.