如果固定链接中没有index.php,我会在整个站点中获得404

时间:2019-12-03 作者:smilebomb

正如标题所说,当我在管理中更改永久链接时,我的所有页面都返回404(主页除外)。我必须包括在内index.php 作为所有不同路径的起点。如果我包括在内,所有的路径都很好index.php.

例如:

自定义结构:/index.php/%postname%/%day%/ 将在我浏览我的网站时工作。自定义结构:/%postname%/%day%/ 将不工作(主页除外)。

服务器上已启用mod\\u rewrite:

$ sudo a2enmod rewrite
Module rewrite already enabled
我有一个.htaccess 文件:

$cat /var/www/directory_name/.htaccess
# BEGIN WordPress
# The directives (lines) between `BEGIN WordPress` and `END WordPress` are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
。。。并且可由web服务器写入:

$ ls -al
-rwxr-xr-x  1 www-data www-data   461 Dec  3 14:11 .htaccess
我的apache配置:

$ cat /etc/apache2/sites-enabled/domain.conf
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName mydomain.com
    ServerAlias www.mydomain.com
    DocumentRoot /var/www/domain
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =domain.com [OR]
RewriteCond %{SERVER_NAME} =www.domain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
<Directory /var/www/domain/>
    AllowOverride All
    Options +FollowSymLinks
    Require all granted
</Directory>
</VirtualHost>

$cat /etc/apache2/sites-enabled/domain-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin webmaster@localhost
    ServerName domain.com
    ServerAlias www.domain.com
    DocumentRoot /var/www/domain
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/domain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain.com/privkey.pem
</VirtualHost>
</IfModule>

1 个回复
最合适的回答,由SO网友:MrWhite 整理而成

添加垃圾也没有任何作用。

这表明.htaccess 根本没有处理文件。您需要设置AllowOverride All 在适当的<Directory> 主服务器配置中的容器(或<VirtualHost> 容器),以启用对每个目录的分析.htaccess 文件(允许.htaccess 覆盖服务器配置的指令)。

这个FollowSymLinks (或SymLinksIfOwnerMatch) 还需要启用选项才能使mod\\u rewrite正常工作。(尽管FollowSymLinks 默认情况下已启用。)可以在服务器配置或.htaccess 文件

例如:

<Directory /var/www/directory_name>
    AllowOverride All
    Options +FollowSymLinks

    # etc...    

    Require all granted
</Directory>
在哪里/var/www/directory_name 是你的DocumentRoot 以及.htaccess 文件

严格地说,你只需要AllowOverride FileInfo 在中启用mod\\u rewrite的使用.htaccess. 但是,如果以后使用授权指令、目录列表等,则需要启用更多组。

一如既往,在对服务器配置进行任何更改后,需要重新启动Apache才能使更改生效。

UPDATE: 也许我的SSL conf有问题?

由于您正在将服务器配置中的所有内容重定向到HTTPS,因此需要应用以上内容<Directory> 节到您的<VirtualHost *:443> 容器将此应用于<VirtualHost *:80> (即HTTP)不是必需的,在此处不起任何作用。

旁白:

RewriteEngine on
RewriteCond %{SERVER_NAME} =domain.com [OR]
RewriteCond %{SERVER_NAME} =www.domain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
您的HTTP到HTTPS重定向过于复杂,可以简化为单个mod\\u别名Redirect 指令-此处不需要mod\\u重写的额外开销。

您还应该在此处规范化主机名(www或非www)。

例如:

Redirect 301 / https://www.example.com/

相关推荐

Problem with permalinks

我已经更改了类别的基本名称,现在它是“博客”,工作正常。但当我通过/blog/%category%/%postname%/更改结构时。显示404。如果我删除结构中的blog,它会再次工作,但我想使用blog word。问题出在哪里?非常感谢。