mod_rewrite页面美化

时间:2010-05-17 21:01:34

标签: regex mod-rewrite

所以我被困住了。一般来说,我对mod_rewrite或正则表达式不是很好,这给了我一些问题。

我需要将网址重定向为 domain.com/view/Some_Article_Name.html

domain.com/index.php?p=view&id=Some_Article_Name

我现在的规则工作正常,但它也会重写所有我的样式表和图片以及不应重写的内容。
RewriteRule ^view/([^/]*)\.html$ /index.php?p=view&id=$1 [L]

它应该只重定向以domain.com/view/*开头的页面。我想我所需要的只是一个重写,但我似乎无法创建一个有效的页面。知道我需要添加什么才能使它工作而不为每个文件编写重写文件?

RewriteCond %{REQUEST_FILENAME} ^(.*)\.html [NC]
RewriteRule ^view/([^/]*)\.html$ /index.php?p=view&id=$1 [L]

是我的重写声明。

2 个答案:

答案 0 :(得分:1)

我怀疑您的样式表和图片是否受到此规则的影响。因为这意味着您的样式表和图片的网址路径以.html结尾。因为否则规则将不适用。

我宁愿假设您使用相对网址路径来引用样式表和图片,例如./css/style.cssimages/foo/bar.png。从基本URL路径解析此类相对URL路径。这是当前文档的URL路径。

您的原始网址路径只有一个路径段,并且从该点开始时所有相对URL路径都有效。但现在您引入了另一个路径段(/view),并从该路径解析了相对路径。因此,./css/style.cssimages/foo/bar.png现已解析为/view/css/style.css/view/images/foo/bar.png而不是/css/style.css/images/foo/bar.png,与/index.php一样。

解决方案:使用/css/style.css/images/foo/bar.png等绝对网址路径来引用您的外部资源。使用此类URL路径,基本URL可以具有任何路径,并且资源始终可以正确解析。

答案 1 :(得分:0)

你是说你想要css&要在原始文件位置下生存的图片(例如htdocs/view/,其中htdocs是您的源根,但您希望将html的网址重新路由到index.php文件?

如果这就是你所说的,那么你需要的是反向RewriteRule,因为浏览器将选择相对于重定向网址的任何css /图像(假设html中的相对图像/ css引用) )。

除此之外,我同意@David,并且无法确定view.html之间的匹配情况。