我正在编写一个包含多个类别的门户网站。
示例:
http://localhost/portal/cats
http://localhost/portal/dogs
当然,这可以通过URL重写
来实现喜欢这个
RewriteRule ^cats$ /portal/index.php?cat=cats
好的,这样就行了。
当我尝试访问此类页面时出现问题
http://localhost/portal/cats/black-cat-22
我的网址重写是:
RewriteRule ^cats/(.*)-([0-9]+)$ /portal/page.php?cat=cats&id=$2
为什么?
因为我所有的CSS&图像文件位于http://localhost/portal/elements而不是http://localhost/portal/cats/elements - 这甚至不是真正的目录。
所以我正在寻找解决方案如果URL包含/ elements /它从/ portal / elements读取而不是从任何其他目录读取如何重写。
如果不清楚,可以在下面自由询问。
欢呼和新年快乐。
答案 0 :(得分:3)
html <base>
标记拯救的地方:)
在HTML头中添加类似这样的内容:
<base href="http://localhost/portal/" > <!-- or end with /> if XHTML -->
然后,您使用相对URL引用的所有内容都将相对于该基础。
所以你可以使用:
来引用你的CSS<link rel="stylesheet" type="text/css" href="elements/stylesheet.css" />
哪个应解析为:http://localhost/portal/elements/stylesheet.css
,无论您当前访问的是哪个网址(是portal/cats
,还是portal/cats/some-black-cat
等。
答案 1 :(得分:1)
当您在进入应用程序时映射URL时,您需要在从应用程序“返回”时映射URL。
这可以在您为输出创建URL的位置完成,例如定义您的基本网址并分配本地部分:
$baseUrl = 'http://localhost/portal/';
$localUrl = 'elements/image.png';
$fullUrl = $baseUrl . $localUrl;
或者您有自己的内部URL规范,并使用output filter全局映射(PHP方式)。
当您使用.htaccess
将网址映射到您的应用程序时,也可以使用它来映射它们。这可以通过mod_substitute
Docs轻松完成。
在您的应用程序中,您使用特殊的URL值,例如名为site://
,它将自动替换为您的服务器基本网址http://localhost/portal/
。 .htaccess
代码:
<Location />
AddOutputFilterByType SUBSTITUTE text/html
Substitute s/site:\/\//http://localhost/portal//nq
</Location>