为什么我的网址末尾的/给出了500错误,为什么.htaccess无效

时间:2018-03-21 18:32:58

标签: .htaccess

我正在运行一个简单的HTML网站,并进行.htaccess编辑。我有几个问题。

如果我没有安装https,那么www.example.com/apply会重定向到https www.xyz.com/apply.html - 我知道我有https重定向。但是,我也有.html被删除了。

https www.xyz.com/apply将加载

https www.xyz.com/apply/会给出500错误,因为最后有一个/

.htaccess代码如下

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(([A-Za-z0-9\-]+/)*[A-Za-z0-9\-]+)?$ $1.php

<IfModule mod_headers.c>
<FilesMatch ".(js|css|xml|gz|html)$">
Header append Vary: Accept-Encoding
</FilesMatch>
</IfModule>

<filesMatch ".(css|jpg|jpeg|png|gif|js|ico)$">
Header set Cache-Control "max-age=2592000, public"
</filesMatch>

有什么想法吗?我从内存中编写代码,所以希望我不会错过任何内容。

1 个答案:

答案 0 :(得分:0)

您的问题是您在没有/的情况下考虑所有错误的请求,然后您就这样处理它们,因此您应首先检查错误的请求是否有/,然后在内部将其删除,如果您希望文件看起来像目录,然后按照下一条规则处理,优先级为html然后到php,所以,您的规则应如下所示:

Options +FollowSymLinks -MultiViews
RewriteEngine On

#as per your comment that all css files under /css directory i added the
#following rules

RewriteCond %{REQUEST_URI}    !^/css
RewriteCond %{REQUEST_URI}    \.css$
RewriteRule ^(.+)/css/(.*)$    /css/$2 [L]

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^    %1 [L,QSA]
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.+)$ $1.php  [L,QSA]

注意:清除浏览器缓存测试。

<强>更新

如果您希望CSS文件在向文件添加/时有效,则有一种解决方法,例如您将所有CSS个文件放在cssfolder目录中,所以当请求来自html或php文件而没有斜杠,css将正常加载如/cssfolder/file.css,但是使用尾部斜杠路径将是不同的/file/cssfolder/file.css,你可以添加规则来删除任何请求以csscssfolder目录之前有任何内容而结束。

就像那样:

RewriteCond %{REQUEST_URI}    !^/cssfolder
RewriteCond %{REQUEST_URI}    \.css$
RewriteRule ^(.+)/cssfolder/(.*)$    /cssfolder/$2 [L]

上述规则应遵循上述规则的RewriteEngine On