如何只允许用户通过重写页面?

时间:2013-11-11 15:46:07

标签: regex apache .htaccess mod-rewrite

我有一个网站,我正在使用SSI将一些内容添加到首页。但是,我想向用户显示以.html结尾的网址。我通过.htaccessmod_rewrite重定向完成了这项工作。

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

此外,我正在使用指向此网址的其他重定向,在内部使用JavaScript(example.htmlindex.html#example.html)内容加载网页内容,条件是不重定向index.html

现在,我想制作.shtml403 Forbidden。这也很容易:

RewriteRule ^index\.shtml - [F]

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

我尝试将L添加到.html - 到 - .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

1 个答案:

答案 0 :(得分:1)

您可以将此规则与THE_REQUEST变量:

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

您的规则问题是index.html被重写为index.shtml,Apache重新注入重写的URI以进行进一步的规则评估,而Apache问题也会index.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]