.htaccess“漂亮的网址”打破了图片src

时间:2016-03-01 04:31:46

标签: php apache .htaccess mod-rewrite

我使用.htaccess代码将blog.php转换为/ blog /使用此代码:

# --- CUTENEWS[ST]
Options +FollowSymLinks
RewriteEngine On

RewriteRule ^blog(\d+)*$ ./blog.php
RewriteRule ^blog/(\d+)*$ ./blog.php

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /blogengine/show_news.php?cn_rewrite_url=$1 [L]

# --- CUTENEWS[ED]

这很好用,除非我用/ blog /加载网页时,图像会中断。如果我使用/blog.php或/ blog加载网页,图像加载正常。

我一直在搜索人们在Stackoverflow上遇到的所有.htaccess问题,而这正是我所做的事情。 cutenews php就在那里,因为我在我的网站上使用cutenews进行博客整合。

我感谢任何建议。我是.htaccess的新手

2 个答案:

答案 0 :(得分:1)

您没有考虑尾随斜杠。此 RewriteRule ^博客(\ d +) $ *与 / blog / 不匹配。请尝试此选择:

RewriteRule ^blog/([0-9]+[^/])*$ /blog.php/$1

修改 正如我们在聊天中讨论的那样,你需要其他东西,这里是:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d    
RewriteRule ^blog(.*)$ /blog.php?route=$1 [R=301,L]

这将捕获URL,如:/ blog,/ blog /,/ blog / anythig_goes_here / 2343 /。添加301 Permanent Redirect标头,L表示不处理其他规则。

在您的blog.php中,您可以通过以下方式访问'route'参数:

echo $_GET['route'];

编辑:

在进一步讨论之后,通过从重定向url的开头删除“/”来解决问题,所以现在重写规则行看起来像:

RewriteRule ^blog(.*)$ blogposts.php?route=$1 [L]

对于图像,需要使用绝对URL,从“/”开始指向您的Web根目录。

答案 1 :(得分:1)

这是因为您的相对URI的基数已更改。最初,当页面为/时,基数为/blog.php,浏览器会正确填充/基础的相对链接。但是当浏览器转到/blog/这样的页面时,基础突然变为/blog/,它会尝试将其附加到所有相对URL之前,因此它们都不会加载。

您可以将链接设为绝对,也可以更改网页标题中的URI基数(在<head> </head>标记之间):

<base href="/">