0

我一直在网上想知道如何使用 htacces(真的很难学)。当我潜伏在互联网上时,我发现了这个:http ://www.generateit.net/mod-rewrite/

好吧,我插入了我的网址(在本地主机上工作):
empresa.com/index.php?p=sub_artigo&id=1&cat=Mercearia

它给了我这个(默认情况下所有选项):
http://empresa.com/sub_artigo/5/Mercearia.html

.htacces 代码是这样的:
RewriteRule ^([^/]*)/([^/]*)/([^/]*)\.html$ /index.php?p=$1&id=$2&cat=$3 [L]

当我在 php 中生成 url 时

<a href=\"sub_artigo/".$response2['ID_sub_artigo']."/".$response2['url'].".html\">$response2[nome_sub_artigo]</a>

然后,当我单击按钮时,它看起来就像只有 html。示例:http ://s14.postimg.org/wr137fx4x/htacces_error.jpg

知道发生了什么吗?

4

3 回答 3

4

看起来您正在为您的资产(图像、javascript、css)使用相对链接。

这意味着当您css/my_stylesheet.css从新的 url 中查找 时,浏览器将请求一个类似http://empresa.com/sub_artigo/5/css/my_stylesheet.css.

最简单的解决方案是始终为您的资产使用绝对网址,例如/css/my_stylesheet.css等。

于 2013-07-17T14:15:55.077 回答
1

您的 PHP 代码正在输出样式表的相对路径。

例子:

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

给定您的示例输入 URL,这会导致浏览器在以下 URL 处查找样式表:

http://empresa.com/sub_artigo/5/styles.css

这是因为浏览器不知道 URL 已被重写 - 它认为它正在查看一个实际上并不存在的子目录中的文件。

相反,您应该使用绝对路径,例如:

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

/注意路径上的领先?这将告诉浏览器从域的根目录查找:

http://empresa.com/styles.css

通过这种方式,您仍然可以将您的 HTML 与协议和域/端口分离(因此您不会绑定到http://empresa.com),但无论用于访问引用页面的 URL 是什么,路径都将始终相同。

于 2013-07-17T14:18:52.107 回答
0

试试这个代码:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)/([^/]*)/([^/]*)\.html$ /empresa.com/index.php?p=$1&id=$2&cat=$3 [L]
于 2013-07-17T14:11:40.130 回答