重写规则改变了 Web 应用程序的基本路径

重写规则改变了 Web 应用程序的基本路径

我有一个简单的网络应用程序,我将其设置为使用 .htaccess 来执行重写规则。

Options +followSymlinks
RewriteEngine on
Rewriterule ^records/view/([0-9]+)$ ./record_view.php?id=$1 [NC]

它可以工作,但页面看不到外部 CSS 文件。它不是查找 ./style.css,而是查找 records/view/style.css。

<link rel="StyleSheet" href="style.css" type="text/css" />

如果我使用它的完整路径,它就会起作用:href="/myapp/style.css"

该应用程序是在添加重写规则之前编写的,因此这也会破坏应用程序中的所有链接。 href="index.php"必须变成href="/myapp/index.php"

我是否必须返回并修复所有链接才能使用重写规则,或者我可以更改配置?(Ubuntu Server 11,Apache2,PHP5)

谢谢。

答案1

如何捕获所有资源请求并将它们重写为所需的状态?

# Existing config:
RewriteEngine on
RewriteRule ^records/view/([0-9]+)$ ./record_view.php?id=$1 [NC]
# Add:
RewriteRule ^records/view/(.*)$ ./$1 [NC]

这可以修复资源,但对链接没有帮助——那些需要重定向。

当然,您可以使用更多规则来解决这个问题,但我建议修复链接。清理 HTML 以适应应用程序的结构比在 Apache 的配置中对其进行修改更有意义。

相关内容