我有一个在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
文件中有一些内容阻止了它以所需的方式工作。
答案 0 :(得分:0)
你可以试试这个:
在你所有的
中RewriteCond%{REQUEST_FILENAME}!-f
将它加倍,因为只有当lt既不是目录也不是文件时,要重写:
(在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]
看看它是否更好?请注意一些注释的无限循环重写。
答案 1 :(得分:0)
我的vps上有类似的情况
我希望我的默认主页是login.php,所以如果有人去哪里http:// [ip] / [folder] /它只会加载我在.htaccess中设置的login.php文件[文件夹]
所以我在.htaccess中设置了'DirectoryIndex login.php'但是
它不会起作用而我会在访问http:// [ip] / [folder] /时获得403,因为我没有任何index.html或index.php
所以...
我决定检查apache配置文件httpd.conf并在DirectoryIndex下我把'login.php'作为已经存在的列表的一部分然后重新启动httpd服务和
它对我有用!
答案 2 :(得分:-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]
我不知道为什么会起作用,但似乎确实有效...... 戴尔