The home page of my wordpress website seems to be displaying correctly but if you click through to any of the other pages I get the following error message:
On my MacOS Catalina machine I discovered that an additional file had been created at /etc/apache2/users/my-username.conf
where the default was
AllowOverride none
Changing that to All
finally got things working for me. The challenge with Mac is that its hard to get to these directories with Finder so its easy not to spot this file
If all above point not work. Then try this one. I tried it. It's working for me.
UPDATE 2017
For new versions of apache the file is called apache2.conf
So to access the file, type sudo nano /etc/apache2/apache2.conf and change the correspondent line inside block <Directory /var/www >
Here is another version for Wordpress, original one did not work as intended.
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^index\.php$ - [END]
RewriteCond $1 ^(index\.php)?$ [OR]
RewriteCond $1 \.(gif|jpg|png|ico|css|js)$ [NC,OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ - [END]
RewriteRule ^ /index.php [L]
</IfModule>
# END WordPress
Reference from this Github repository, modified a bit. After excessive testing this rule does not solve all problems. We have a Wordpress webshop, which has 40 plugins and somewhere is there a rewrite clash. I sincerely hope next version of Wordpress has no URL rewrites.
RewriteRule ^index\.php$ - [L]
The ^
signifies start of the string, \
escapes .
or it would mean any character, and $
signifies end of the string.
^index\.php$
if http(s)://hostname/index.php -
do nothing [END]
flag can be used to terminate not only the current round of rewrite processing but prevent any subsequent rewrite processing.
RewriteCond $1 ^(index\.php)?$ [OR]
In RewriteCond
using $1
as a test string references to captured contents of everything from the start to the end of the url http(s)://hostname/bla/bla.php. If used in substitution or condition it references to captured backreference. RewriteRule (bla)/(ble\.php)$ -
for http(s)://hostname/bla/ble.php captures bla
into $1
and ble.php
into $2
. Multiple capture groups can be accessed via $3..N
.
( )
groups several characters into single unit, ?
forces the match optional.
[OR]
flag allows you to combine rewrite conditions with a logical OR relationship as opposed to the default AND.
In short, if bla/bla.php contains index.php OR next condition
RewriteCond $1 \.(gif|jpg|png|ico|css|js)$ [NC,OR]
( )
groups several characters into single unit, |
separates characters to subgroups and conditions them if any one of.
[NC]
flag causes the RewriteRule to be matched in case-insensitive manner.
In short, if bla/bla.php ends with any of the filetypes OR next condition
RewriteCond %{REQUEST_FILENAME} -f [OR]
Server-Variables are variables of the form %{ NAME_OF_VARIABLE } where NAME_OF_VARIABLE can be a string taken from the following list:
%{REQUEST_FILENAME}
is full local filesystem path to the file or script matching the request, if this has already been determined by the server at the time REQUEST_FILENAME is referenced. Otherwise, such as when used in virtual host context, the same value as REQUEST_URI. Depending on the value of AcceptPathInfo, the server may have only used some leading components of the REQUEST_URI to map the request to a file.
-f
check for regular file. Treats the test string as pathname and tests whether or not it exists.
In short, if bla/bla.php is a file OR next condition
RewriteCond %{REQUEST_FILENAME} -d
-d
check for directory. Treats the test string as a pathname and tests whether or not it exists.
In short, if bla/bla.php is a directory
RewriteRule ^(.*)$ - [END] not as in Github [S=1]
This statement is only executed when one of the condition returned true.
.
match any character *
zero or more times.
The [S]
flag is used to skip rules that you don't want to run. The syntax of the skip flag is [S=N]
, where N
signifies the number of rules to skip (provided the RewriteRule matches). This can be thought of as a goto statement in your rewrite ruleset. In the following example, we only want to run the RewriteRule if the requested URI doesn't correspond with an actual file.
In short, do nothing
RewriteRule ^ /index.php [L]
The [L]
flag causes mod_rewrite to stop processing the rule set. In most contexts, this means that if the rule matches, no further rules will be processed. This corresponds to the last command in Perl, or the break command in C. Use this flag to indicate that the current rule should be applied immediately without considering further rules.
In short, rewrite every path as http(s)://hostname/index.php
I fetched this little doc together from apaches.org documentation. Links below.
Although solution to this problem is hardly coded in regeneration of your .htaccess file; indeed it din't worked for most of you specially when the site is migrated to some new server.
Let's dive into some basics.
Let's assume that for most of us, WordPress environment is running on a PHP server APACHE where this server is controlling most of our environment's initial dependencies. Meanwhile .htaccess generation is also mainly dependent on Apache configurations.
So if that been said, the contribution of .htaccess creation conflict mainly occurs when a WordPress website is migrated from a server running the WordPress environment on old version of Apache and PHP to a newer version of PHP and Apache.
Because dependencies of nrwer and older versions are different that's why the newer version of Apache2 won't allow the .htaccess directives to create a .htaccess file by default; because of which we have to manually set the WordPress website's root directory permissions from "AllowOverride None" to "AllowOverride All".
Comparatively, AllowOverride directive is used to allow the use of .htaccess within the web server to allow overriding of the Apache config on a per directory basis.
Use the following fix to change the apache2.conf directory permission settings:
How to deal with GCP WordPress error "This page isn’t working example.com is currently unable to handle this request. HTTP ERROR 500
**Solved Permalink Issue Wordpress ** 1) Login to wordpress dashboard > click on settings > premalinks > then select post name. 2) After that login to your hosting server goto .htaccess file and replace the code.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
It worked for me like this:
Go to Wordpress Admin Dashboard > “Settings” > “Permalinks” > “Common settings”, set the radio button to “Custom Structure” and paste into the text box:
/index.php/%year%/%monthnum%/%day%/%postname%/
and click the Save button.
I got this solution from this link