重写.htaccess以防止用户访问“索引”

时间:2017-06-21 04:29:00

标签: html apache .htaccess mod-rewrite

这是我的.htaccess,我使用404自定义页面并隐藏.html和.php扩展名。但是当我阻止用户输入.html和.php时,他们也可以访问http://example.com/index和子文件夹http://example.com/folder/index。我使用相对url链接图像和assests,用户输入“index”将使其取消链接。如何使用.htaccess将任何“索引”重定向到/error404.html?

ErrorDocument 404 /error404.html

<IfModule mod_rewrite.c>
  RewriteCond %{THE_REQUEST} \.(?:html|php)\s [NC]
  RewriteCond %{REQUEST_URI} !=/error404.html
  RewriteRule ^ - [R=404,L]
  Options +FollowSymLinks
  RewriteEngine On
  RewriteBase /

# Add trailing slash to url
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/|#(.*))$
  RewriteRule ^(.*)$ $1/ [R=301,L]

# Remove .php-extension from url
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME}\.php -f
  RewriteRule ^([^\.]+)/$ $1.php 

# Remove .html-extension from url
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME}\.html -f
  RewriteRule ^([^\.]+)/$ $1.html 

# End of Apache Rewrite Rules
 </IfModule>

2 个答案:

答案 0 :(得分:0)

我只是解决了一半...... 代码在这里:

<Files "index">
RewriteCond %{REQUEST_URI} !=/error404.html
RewriteRule ^ - [R=404,L]
</Files>

它只适用于http://example.com/index,只能在根目录下工作,对于另一个子文件夹,它不起作用。有人有更好的答案吗?

<强>更新

<Files "index">
RewriteCond %{REQUEST_URI} !=/error404.html
RewriteRule ^ - [R=404,L]
</Files>
<Files "folder/index">
RewriteCond %{REQUEST_URI} !=/error404.html
RewriteRule ^ - [R=404,L]
</Files>

这段代码是一种愚蠢的解决方式,但如果我有数千个文件夹,那将非常复杂。

答案 1 :(得分:0)

最后,此方法可以将所有“索引”重定向到错误页面,错误为404。

RewriteEngine on
RewriteCond %{REQUEST_URI} index
RewriteCond %{REQUEST_URI} !=/error404.html
RewriteRule ^ - [R=404,L]

http://example.com/加载时出错了。 js和css文件似乎是unlink。使用back stupid方法可以访问js和css文件。