htaccess重写规则

时间:2011-08-31 14:52:02

标签: php mod-rewrite rewrite

第一次使用RewriteRule,所以我做了

RewriteRule ^details/(.*)/(.*)$ /details.php?id=$1&name=$2 [NC]

但是图像,js等存在一些问题。例如图像不起作用。当我试图找到路径details/3367/images/coins-icon.png

有没有办法解决它?

我试过

RewriteRule ^details/(.*)/images/(.*)$ /images/$1

但这似乎不起作用。

2 个答案:

答案 0 :(得分:1)

从重写中排除现有文件和目录:

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

此外,您应该使用<base href>或绝对网址(以正斜杠/开头),以防止浏览器根据相对网址访问图像文件。

因此,当您查看页面/details/456/并且页面上有图片images/456/foo.jpg时,浏览器会搜索/details/456/images/456/foo.jpg。要防止这种情况发生,请使用<base href>或绝对网址(/images/456/foo.jpg)。

答案 1 :(得分:0)

你写的规则是正确的,但不是你想要的。

RewriteRule ^details/(.)/(.)$ /details.php?id=$1&name=$2 [NC]

模式中的(。)将匹配任何单个字符并捕获它。您可能希望捕获多个这样的字符:

RewriteRule ^details/(.+?)/(.+?)$ /details.php?id=$1&name=$2 [NC]

+是让编译器知道你想要一个或多个匹配,并且?让编译器知道捕获尽可能少的字符(以防止它比下一个/更远)