2013-02-22 157 views
0

我尝试使用搜索引擎友好的URL为我的网站,我的目标是要改写product/131/ABCDEFGHproductpage.php?id=131.htaccess的重写问题

我实现了这个现在重写路径,并打开正确的页面

的.htaccess代码

RewriteEngine on 
RewriteBase/
RewriteRule ^product/(([^/]*))/([^/]*)$ /cprrpc/productpage.php?id=$1 [L] 

现在我又遇到了一个与内部链接有关的问题,目前这个页面上的所有图片等都是用相对路径绑定的。

现在,这是行不通的,因为他们都在不同的路径正在寻找,

我打开另一种方法或更改htaccess文件。

回答

1

您的网址被扭曲所改写网址结构,因为现在有两个目录级别。而不是使用相对URL 到当前目录为您的资源使用主导斜杠或者您可以使用PHP在所有资源前向您的应用程序打印“根路径”。

例如,而不是使用相对URL(当前目录):

<img src="images/plus.png" />(扩展到本地主机/cprrpc /产品/ 131 /图像/ gplus.png

你可以使用前导斜杠这使得相对于卷筒纸根的网址:

<img src="/cprrpc/images/plus.png" />(扩展到本地主机/cprrpc /图像/ gplus.png

或者你可以打印Web根目录使用PHP:

<img src="<?php echo $WEB_ROOT ?>/images/plus.png" />(扩展到本地主机/cprrpc /图片/ gplus.png

+0

但随着我添加这些条件,我的原始页面也不打开。可能是我错过了什么? – Kasma 2013-02-22 11:09:54

+0

那么这些条件只会修复现有位置*/product/xxx/yyy ... *中的资源,但不会与其他任何内容匹配。基本上它不会影响你的重写,除非文件或目录已经存在于你的文件系统中。假设你正在尝试重写'product/131/ABCDEFGH',但是你也有这个确切的文件结构(我怀疑它),那么现有的文件/目录将会照常执行。但是如果你删除了它的工作条件再次? – kjetilh 2013-02-22 11:20:34

+0

对不起,您的代码没有丢失我的页面,但仍然没有打开图像 加载资源失败:服务器响应状态为404(未找到)http:// localhost/cprrpc/product/131/images/gplus.png 因为这个网页图片是相对于这个主url而言是cprprc/images/glus.png – Kasma 2013-02-22 11:22:46

1

您需要允许Apache来从自己的真实位置为现有文件:

RewriteEngine on 
RewriteBase/

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

RewriteRule ^product/(([^/]*))/([^/]*)$ /cprrpc/productpage.php?id=$1 [L] 

这意味着Apache将忽略重写如果请求的图像..

+0

但我添加了这些条件,我原来的改写也没有打开。可能是我错过了什么? – Kasma 2013-02-22 11:09:34

+0

我错过了!否则 – Andrew 2013-02-22 11:14:38

+0

抱歉,您的代码没有丢失我的页面,但仍然没有打开图像 加载资源失败:服务器响应状态为404(未找到)http:// localhost/cprrpc/product/131 /images/gplus.png 因为此页面图片与主要网址相关,因此您使用的是相对图片路径,请尝试使用绝对路径:cprprc/images/glus.png – Kasma 2013-02-22 11:23:05