使用.htaccess到RewriteRule,但每个文件都指向一个文件

时间:2016-12-07 01:25:08

标签: html .htaccess

我目前正在尝试使用.htaccess执行以下操作:

在网址中找到b/后,它会重定向到browse.html。我的.htaccess文件如下:

RewriteEngine On    # Turn on the rewriting engine
RewriteRule    ^b/(.*)$    browse.html    [NC,L]

我正在使用Apache 2.2.31版本,这是我的目录:

Root
    Root/browse.html
    Root/[css]
              Root/css/browse.css
    Root/[js]
              Root/js/browse.js

当我这样做时,它会将我带到browse.html但没有正确加载。 cssjs目录中的每个文件都成为browse.html。我需要添加一些额外的东西吗?

以下是使用.htacess

开发工具目录的内容
localhost
         b/?page=1 (browse.html file. Name comes from query string)
         b/[css]
                 b/css/browse.css (blank file)
         b/[js]
                 b/js/browse.js (browse.html instead of browse.js)

我尝试将RewriteBase /置于其间,但这对问题没有任何作用。

2 个答案:

答案 0 :(得分:1)

如果存在文件/文件夹,请务必忽略请求:

RewriteEngine On    # Turn on the rewriting engine
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^b/(.*)$    browse.html    [NC,L]

答案 1 :(得分:1)

你的重写规则没问题。由于您使用css / js / images的亲戚路径,问题正在发生。在解析相对路径时,浏览器会将其附加到当前页面的路径。

您可以将此规则添加到现有规则之上:

RewriteEngine On

# fix css/js paths
RewriteRule ^b/.*((?:js|css)/.+)$ /$1 [NC,R=301,L]

RewriteRule ^b/(.*)$ browse.html [NC,L]