0

我有一个网站,我在其中使用 SSI 将一些内容添加到首页。但是,我想向用户显示一个以.html. 我已经通过 a.htaccessmod_rewrite重定向实现了这一点。

RewriteRule ^index\.html$ index.shtml [PT,L]

此外,我正在使用另一个指向此 URL 的重定向来使用 JavaScript ( example.htmlto index.html#example.html) 在内部加载页面的内容,条件是不重定向index.html

现在,我想制作.shtml页面403 Forbidden。这也很容易:

RewriteRule ^index\.shtml - [F]

但是,现在index.html也被禁止了。

我尝试添加L.html-to-.shtml规则,但这没有帮助。如何解决这个问题?

编辑:这是我的完整.htaccess文件,其中包含 anubhava 建议的内容。

ErrorDocument 404 /subdir/notfound.html
ErrorDocument 500 /subdir/internalerror.html

RewriteEngine on
RewriteCond $1 !^(index\.html|notfound\.html|internalerror\.html)(#.*)?$
RewriteRule ^([^/]*\.html)$ /subdir/index.html#$1 [R=302,NE]

RewriteRule ^index\.html$ index.shtml [PT,L]

RewriteCond %{THE_REQUEST} index\.shtml
RewriteRule ^index\.shtml - [F]

还有我的目录结构:

/public_html
|
+-- subdir
    |
    +-- .htaccess
    |
    +-- index.shtml
    |
    +-- notfound.html
    |
    +-- internalerror.html
    |
    +-- style.css
    |
    +-- script.js
    |
    +-- ajax-pages
        |
        +-- index.html
        |
        +-- foo.html
        |
        +-- bar.html
4

1 回答 1

1

您可以将此规则与THE_REQUEST变量一起使用:

RewriteCond %{THE_REQUEST} /index\.shtml [NC]
RewriteRule ^ - [F]

您的规则的问题是index.html被重写index.shtml并且 Apache 重新注入重写的 URI 以进行进一步的规则评估,并且 Apacheindex.html也发出 Forbidden 错误。

完成.htaccess:

ErrorDocument 404 /subdir/notfound.html
ErrorDocument 500 /subdir/internalerror.html

RewriteEngine on

RewriteCond %{THE_REQUEST} index\.shtml [NC]
RewriteRule ^index\.shtml - [F]

RewriteRule ^index\.html$ index.shtml [L,NC]

RewriteCond %{REQUEST_URI} !/(index\.s?html|notfound\.html|internalerror\.html) [NC]
RewriteRule ^([^/]*\.html)$ /subdir/index.html#$1 [R=302,NE,L]
于 2013-11-11T15:51:44.807 回答