1

我有一个在 Linux/UNIX 上运行的网站,但我对 .htaccess 文件及其使用的语法一无所知。

如果你去http://pr.bananapages.net系统不会产生任何结果。但是如果你添加文件名,它就会出现。前任:http://pr.bananapages.net/index.html

注意:该 URL 指向共享访问托管服务器上的子文件夹,但这并不重要,因为当您输入时www.bananapages.net/pr/hamshack,(这是快捷 DNS 地址指向的位置),它仍然不会生成 index.html 文件没有实际指定它。

我已经尝试了所有我能找到的东西,DirectoryIndex但是如果不使用文件名我就无法让它工作......(index.html)

这是我当前的.htccess文件。

Options -MultiViews

DirectoryIndex system.php index.php

<IfModule mod_rewrite.c>
DirectoryIndex system.php index.php index.html

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)\.(.*)$
RewriteRule ^(.+[^/])$ http://%{HTTP_HOST}%{REQUEST_URI}/ [L,R=301]

# Google sitemap controller
RewriteRule ^sitemap.xml$ tmp/sitemap.xml [L]
RewriteRule ^tmp/sitemap.xml$ tmp/sitemap.xml [L]
RewriteRule ^index.html$ index.html [L]

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*)(\.xml|\.php([0-9]*)|\.tpl|\.phtml|\.ini|\.inc|/)$ system.php?_p=$1 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ system.php?_p=$1 [QSA,L]

</IfModule>

# compresses text, html, javascript, css and xml
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
AddOutputFilterByType DEFLATE application/xml application/xhtml+xml application/rss+xml
AddOutputFilterByType DEFLATE application/javascript application/x-javascript
</IfModule>

注意:如果我重命名.htaccess文件,它会在不指定文件名(index.html)的情况下工作。我相当肯定这个.htaccess文件中有一些东西阻止它以所需的方式工作。

4

3 回答 3

0

你可以试试这个:

在你所有的

RewriteCond %{REQUEST_FILENAME} !-f

因此,将其翻倍,说仅当它既不是目录也不是文件时才进行重写:

编辑

(在 Debian/Apache2 中测试)。

Options -MultiViews

DirectoryIndex system.php index.php index.html

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)\.(.*)$
RewriteRule ^(.+[^/])$ http://%{HTTP_HOST}%{REQUEST_URI}/ [L,R=301]

# Google sitemap controller
RewriteRule ^sitemap.xml$ tmp/sitemap.xml [L]
#RewriteRule ^tmp/sitemap.xml$ tmp/sitemap.xml [L]
#RewriteRule ^index.html$ index.html [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)(\.xml|\.php([0-9]*)|\.tpl|\.phtml|\.ini|\.inc|/)$ system.php?_p=$1 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ system.php?_p=$1 [QSA,L]

看看它是否效果更好?请注意一些已注释的无限循环重写。

于 2013-11-10T10:03:04.397 回答
0

我的vps也有类似的情况

我希望我的默认主页是 login.php,所以如果有人去 http://[ip]/[folder]/ 它只会加载我在 [folder] 中的 .htaccess 中设置的 login.php 文件

所以我在 .htaccess 中设置了“DirectoryIndex login.php”,但是

它不起作用,而是在访问 http://[ip]/[folder]/ 时会得到 403,因为我没有任何 index.html 或 index.php

所以...

我决定检查 apache 配置文件 httpd.conf 并在 DirectoryIndex 下我将“login.php”作为已经存在的列表的一部分然后重新启动 httpd 服务并

它对我有用!

于 2014-02-09T02:43:23.133 回答
-1

这是答案...

# Rules for subfolders
# for pr.bananapages.net
RewriteRule ^pr/(.*)$ pr/$1 [L]
# for jm.bananapages.net    
      RewriteRule ^jm/(.*)$ jm/$1 [L]
# and so on....
      RewriteRule ^dr/(.*)$ dr/$1 [L]
RewriteRule ^usvi/(.*)$ usvi/$1 [L]
RewriteRule ^bvi/(.*)$ bvi/$1 [L]
RewriteRule ^kitts/(.*)$ kitts/$1 [L]
RewriteRule ^ar/(.*)$ ar/$1 [L]
RewriteRule ^tt/(.*)$ tt/$1 [L]

我不知道为什么会这样,但它似乎确实有效......戴尔

于 2013-11-11T05:05:34.543 回答