Apache RewriteEngine CSS&的RewriteRules

时间:2013-01-29 21:13:19

标签: apache .htaccess mod-rewrite

我在本地主机上使用重写引擎时遇到了一些问题。 我正在我的www/project1/文件夹中的一个网站上工作,我正在尝试使用重写引擎。但是我遇到了一些问题:

首先,这是我的.htaccess文件:

RewriteEngine On  

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^profile$ ./index.php?p=userprofile 
RewriteRule ^profile/(.*)$ ./index.php?p=userprofile&id=$1 [L]

RewriteRule $(.*)$ ./index.php&c=$1

基本上我想改写 /profile的所有index.php?p=userprofile个链接 重写/profile/5

的所有index.php?p=userprofile&id=5个链接

和所有其他人(例如/somepage)到index.php?c=somepage

使用上面的.htaccess时,我首先得到500内部服务器错误。但是,当删除最后一次重写时,此错误就会消失。

删除最后一条规则后,另一个问题就出现了 当转到localhost/project1/profile时,一切都运行得很好,但是当添加另一个参数时:localhost/project1/profile/5我的所有css都消失了。

我的CSS包含如下:href="style/main.css"

因此该文件位于localhost/project1/style/main.css

现在我尝试通过添加/来使路径相对 但是CSS根本没有应用,不在index.php上,也不在project1/profile

对此有任何解决方案,以便我可以使用我的3条规则吗?

1 个答案:

答案 0 :(得分:2)

最后一条规则是错误的。

RewriteEngine on

RewriteRule ^profile$ index.php?p=userprofile [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^profile/(.*)$ index.php?p=userprofile&id=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?c=$1 [L]

关于CSS,您必须使用绝对路径。所以你需要href="/project1/style/main.css"

您也可以使用.htaccess规则,而不是更改所有网址。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*/style.css$ style.css [NC,L]

您必须将它放在.htaccess中的所有规则之前。