2014-10-27 21 views
1

我最近开始使用.htaccess url重写,目前我正面临一个问题。资源的位置与URL无关(.htaccess url rewrite)

我的文件夹结构是这样的:

  • 的index.php
  • htaccess的
  • 图像/
  • CSS/
  • JS/
  • 功能/

我的网站l通过做所有页面

index.php?page=register 

其中我的页面位于函数映射。

的问题是,当我把这个在我的.htaccess

RewriteEngine On # Turn on the rewriting engine 
RewriteRule ^register/?$ index.php?page=register [NC,L] # Handle login page request 
RewriteRule ^profile/([0-9]+)/?$ index.php?page=profile&member_id=$1 [NC,L] # Handle profile page request 

当我浏览到

<website>/register/ 

我的CSS文件位于

../css/style.css 

但是当我导航到

<website>/profile/1/ 

我的CSS文件位于

../../css/custom.css 

如何确保页面总是加载从

css/custom.css 

我的文件是存在的,也许是提到的index.php的位置的变量?所以,我可以做

<link rel="stylesheet" type="text/css" href="<?= $variable ?>/css/custom.css" /> 
我在Windows上使用XAMPP(最新版本)

和网站将在基于Linux的Web服务器发布。

如果您需要更多关于我的实施的信息,我现在无法想象,我会分享它。

+0

修改.htaccess以将所有css请求重定向到您的css目录。我想你还需要添加一个RewriteCond。 – Chad 2014-10-27 12:25:59

回答

1

有两种方法来解决这个问题:

  1. 使用在你的CSS绝对路径,JS,图片文件,而不是相对的。这意味着您必须确保这些文件的路径始于http://或斜杠/

  2. 您也可以尝试在页面的HTML标头中添加以下内容:<base href="/" />,以便每个相对URL都从该URL解析而不是当前URL解析。

+0

感谢您的解决方案。我喜欢这个解决方案,因为如果你移动文件夹,它只需要1行编辑。 – 2014-10-27 12:34:03

+0

不客气,很高兴帮助。 – anubhava 2014-10-27 12:35:11

1

如果您的网站位于例如, http://example.com/然后就去做

<link rel="stylesheet" type="text/css" href="/css/custom.css" /> 

如果它位于像http://example.com/mysite/一个子目录,那么你必须将它添加到您的路径

<link rel="stylesheet" type="text/css" href="/mysite/css/custom.css" /> 

您应该添加以下到您.htaccess

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

如果文件存在,这将“忽略”重写规则,以便您的css将被加载。

+0

感谢您的解决方案。奇迹般有效。我更喜欢anubhava的答案,因为我的文件夹位于子目录中,的用法只需要一行就可以编辑。还是非常感谢帮助我。 – 2014-10-27 12:33:15