我有一个网站,我正在使用SSI将一些内容添加到首页。但是,我想向用户显示以.html
结尾的网址。我通过.htaccess
和mod_rewrite
重定向完成了这项工作。
RewriteRule ^index\.html$ index.shtml [PT,L]
此外,我正在使用指向此网址的其他重定向,在内部使用JavaScript(example.html
至index.html#example.html
)内容加载网页内容,条件是不重定向index.html
。
现在,我想制作.shtml
页403 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
答案 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]