htaccess url重写不正常

时间:2014-04-29 20:55:19

标签: apache .htaccess url mod-rewrite rewrite

我知道这已被问了好几次,但我现在已经在脑子里打了几个小时,而我似乎无法弄清楚这一点。

所以我有一个网址:http://example.com/product.php?id=123 我想重写为http://example.com/product/123

我有这段代码:

RewriteRule ^product/([^/\.]+)/?$ product.php?id=$1 

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([A-Za-z-\s0-9]+)$ /product.php?id=$1 [L]

它使http://example.com/product/123 url工作,但是图片没有加载,我猜是因为php试图在/ product目录中找到它们,而且如果我输入了orignal url它没有'得到改写。

那你可以帮我解决这些问题吗?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

将此代码放入DOCUMENT_ROOT/.htaccess文件中:

RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} \s/+product\.php\?id=([^\s&]+) [NC]
RewriteRule ^ product/%1? [R=301,L]

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule ^ - [L]

RewriteRule ^product/([^/.]+)/?$ product.php?id=$1 [L,QSA]

RewriteRule ^([A-Za-z\s0-9-]+)/?$ /product.php?id=$1 [L,QSA]

对于css / js / images的问题,请在css,js,images文件中使用绝对路径,而不是相对路径。这意味着您必须确保这些文件的路径以http://或斜杠/开头。

您可以尝试在页面的HTML标题中添加:<base href="/" />