htaccess RewriteRule问题

时间:2016-09-25 19:05:20

标签: apache .htaccess mod-rewrite

我有一个可以在实时服务器上运行的网页。但是,使用cms编辑器创建的文件(jpg,pdf和其他)的某些链接包含相对路径。 当我在本地测试服务器上运行该页面时,该服务器从localhost的子文件夹中提供页面,文件的相对路径是错误的,因为它们在开头缺少子文件夹。 html页面加载正常。只是它中的一些文件路径错误并且无法加载。

页面加载http://localhost/level1/

文件正在尝试从http://localhost/level2/加载,我得到了404s。

他们应该从http://localhost/level1/level2/

加载

所以我设置了一个RewriteRule来纠正路径,但无论我尝试过什么,我都无法让它工作。我尝试了各种标志,包括[R,L],但没有改变html中的URI。

目前我有:

RewriteRule ^/level2/(.*)$ /level1/level2/$1 [R]

有什么建议吗?

由于

1 个答案:

答案 0 :(得分:0)

听起来这些链接不是相对路径而是绝对路径(以前导斜杠(/)开头。这就是问题发生的原因。相对路径更有意义。

这将是您的http服务器主机配置中使用的版本:

RewriteEngine on
RewriteRule ^/level2/(.*)$ /level1/level2/$1 [L,QSA]

此处为.htaccess样式文件的版本(请注意缺少的前导斜杠):

RewriteEngine on
RewriteRule ^level2/(.*)$ /level1/level2/$1 [L,QSA]

您可以使用可在两种情况下使用的版本:

RewriteEngine on
RewriteRule ^/?level2/(.*)$ /level1/level2/$1 [L,QSA]

但请注意,通常情况下总是更喜欢将此类规则放在http服务器主机配置中。 .htaccess样式文件非常容易出错,难以调试,而且它们真的会使服务器变慢,通常一无所获。 .htaccess样式文件仅为使用非常便宜的虚拟主机提供商的用户提供最后一个选项。或者对于Web应用程序必须编写自己的重写规则的情况,这显然是一个独立的安全噩梦......