所以我被困住了。一般来说,我对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]
是我的重写声明。
答案 0 :(得分:1)
我怀疑您的样式表和图片是否受到此规则的影响。因为这意味着您的样式表和图片的网址路径以.html
结尾。因为否则规则将不适用。
我宁愿假设您使用相对网址路径来引用样式表和图片,例如./css/style.css
或images/foo/bar.png
。从基本URL路径解析此类相对URL路径。这是当前文档的URL路径。
您的原始网址路径只有一个路径段,并且从该点开始时所有相对URL路径都有效。但现在您引入了另一个路径段(/view
),并从该路径解析了相对路径。因此,./css/style.css
或images/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
之间的匹配情况。