简体   繁体   English

Joomla 3.8启用.htaccess时出现404错误

[英]404 Error in Joomla 3.8 when .htaccess is enabled

I enabled Use URL Rewriting in the Joomla backend and renamed.htaccess.txt to .htaccess using the terminal.我在 Joomla 后端启用了Use URL Rewriting ,并使用终端将 .htaccess.txt 重命名为 .htaccess。 I'm on AWS Ubuntu 16.04 currently.我目前在 AWS Ubuntu 16.04 上。 I have mod_rewrite installed.我安装了 mod_rewrite。

Only my homepage works.只有我的主页有效。 The rest of the pages give a 404 error.页面的 rest 给出了 404 错误。 How do i sort this out?我该如何解决这个问题?

Here's my .htaccess file if anyone wants to see:如果有人想看,这是我的 .htaccess 文件:

##
# @package    Joomla
# @copyright  Copyright (C) 2005 - 2017 Open Source Matters. All rights reserved.
# @license    GNU General Public License version 2 or later; see LICENSE.txt
##

##
# READ THIS COMPLETELY IF YOU CHOOSE TO USE THIS FILE!
#
# The line 'Options +FollowSymLinks' may cause problems with some server configurations.
# It is required for the use of mod_rewrite, but it may have already been set by your 
# server administrator in a way that disallows changing it in this .htaccess file.
# If using it causes your site to produce an error, comment it out (add # to the 
# beginning of the line), reload your site in your browser and test your sef urls. If 
# they work, then it has been set by your server administrator and you do not need to 
# set it here.
##

## No directory listings
<IfModule autoindex>
  IndexIgnore *
</IfModule>

## Can be commented out if causes errors, see notes above.
Options +FollowSymlinks
Options -Indexes

## Mod_rewrite in use.

RewriteEngine On

## Begin - Rewrite rules to block out some common exploits.
# If you experience problems on your site then comment out the operations listed 
# below by adding a # to the beginning of the line.
# This attempts to block the most common type of exploit `attempts` on Joomla!
#
# Block any script trying to base64_encode data within the URL.
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
# Block any script that includes a <script> tag in URL.
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
# Block any script trying to set a PHP GLOBALS variable via URL.
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block any script trying to modify a _REQUEST variable via URL.
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Return 403 Forbidden header and show the content of the root home page
RewriteRule .* index.php [F]
#
## End - Rewrite rules to block out some common exploits.

## Begin - Custom redirects
#
# If you need to redirect some pages, or set a canonical non-www to
# www redirect (or vice versa), place that code here. Ensure those
# redirects use the correct RewriteRule syntax and the [R=301,L] flags.
#
## End - Custom redirects

##
# Uncomment the following line if your webserver's URL
# is not directly related to physical file paths.
# Update Your Joomla! Directory (just / for root).
##

#RewriteBase /

## Begin - Joomla! core SEF Section.
#
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
#
# If the requested path and file is not /index.php and the request
# has not already been internally rewritten to the index.php script
RewriteCond %{REQUEST_URI} !^/index\.php
# and the requested path and file doesn't directly match a physical file
RewriteCond %{REQUEST_FILENAME} !-f
# and the requested path and file doesn't directly match a physical folder
RewriteCond %{REQUEST_FILENAME} !-d
# internally rewrite the request to the index.php script
RewriteRule .* index.php [L]
#
## End - Joomla! core SEF Section.

I have already tried commenting/uncommenting: Options -Indexes RewriteBase /我已经尝试过评论/取消评论: Options -Indexes RewriteBase /

Apparently, I have to edit the 000-default.conf file as well. 显然,我也必须编辑000-default.conf文件。 Here's what I did that solved my problem: 这是我解决问题的方法:

I open /etc/apache2/sites-available/000-default.conf and added this code, restarted apache and it worked like a charm. 我打开/etc/apache2/sites-available/000-default.conf并添加了此代码,重新启动了apache,它的工作/etc/apache2/sites-available/000-default.conf

<Directory /var/www/html/>
Options FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
</Directory>

Hope this helps someone looking for answers. 希望这对寻求答案的人有所帮助。

Just to add to @Elain's answerr,只是为了添加到@Elain 的回答者,

Check if you are loading your site over SSL .检查您是否正在通过 SSL 加载您的网站 And if yes, then you have the culprit.如果是,那么你就是罪魁祸首。

Step 1. edit the virtualhost related to your website but the ssl version (generally its named similar to non ssl version with just the -ssl appended to the name.步骤 1.编辑与您的网站相关但 ssl 版本的虚拟主机(通常其名称类似于非 ssl 版本,只是在名称后附加-ssl

Step 2. Put the following inside the above file.步骤 2.将以下内容放入上述文件中。

<Directory /var/www/html/>
Options FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
</Directory>

Step 3. Disable the config using sudo a2dissite mysite.com-ssl.conf步骤 3.使用sudo a2dissite mysite.com-ssl.conf禁用配置

Step 4. Enable the config using sudo a2ensite mysite.com-ssl.conf步骤 4.使用sudo a2ensite mysite.com-ssl.conf启用配置

Step 5. Restart the apache server, sudo service apache2 restart第五步,重启apache服务器, sudo service apache2 restart

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM