"File does not exist" error on mod_rewrite (WordPress permalink) - wordpress

I'm trying to configure WordPress permalinks on Linode server running Ubuntu. The permalinks are not working even after doing the basic tricks for configuring them.
.htaccess -file has been given permission "777" and WP has rewritten it:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /mydirectory/mysubdirectory/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /mydirectory/mysubdirectory/index.php [L]
</IfModule>
# END WordPress
I have configured "etc/apache2/sites-available/default in a following way:
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride ALL
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride ALL
Order allow,deny
allow from all
</Directory>
<Directory /var/www/mydomin.com/public_html/mydirectory/>
RewriteEngine On
AllowOverride ALL
</Directory>
As you can see I've tried to set "AllowOverride" to different folders. I just gave it a shot, thought that maybe something is overriding the rule for certain folders.
I have ran "a2enmod rewrite" command on Terminal and mod_rewrite is enabled.
I have restarted my Apache every time I've made changes.
When I navigating on my WordPress site I get "Page not found" error. Apache error log says following:
File does not exist: /var/www/mydomain.com/public_html/mydirectory/mysubdirectory/
What am I missing here?

The below settings can go in your VirtualHost directive for the site in question. In most cases this is located in a separate file and referenced from the main conf file for the server.
RewriteEngine On
AllowOverride ALL
Generally speaking you want to keep all of the settings for each site in their own file. So if you need to tweak anything else do it in the file containing the VirtualHost directive for that site. It makes it much easier to troubleshoot/maintain in the future.

Related

Wordpress Permalinks not saving

I have hosted a WordPress site in AWS EC2 and migrated my local to AWS. Now the home page is working fine, but other pages are not opening. It is returning 404. Tried the following in .htaccess-
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
then in apache2.conf
<Directory />
Options FollowSymLinks
AllowOverride All
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride All
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Still no luck. I tried changing the permalink structure, but it is not saving. I keep clicking on the Save Changes button, nothing.
There was a conflict with one of the plugin installed. So, I disabled all the plugins and it was working. Then, one by one I started activating and parallelly checking the functionality and finally found the culprit plugin.

How to remove 'index.php' from permalinks [WordPress on Composer]

I have local server, on which I'm running WordPress with Composer.
After database migration from my local to AWS RDS, the permalinks changed it's behaviour: now there's 'index.php' in the beginning of tags, like:
http://example.com/index.php/name-of-page
Also, in the wp-admin->Settings->Permalinks the structure is custom now:
/index.php/%year%/%monthnum%/%day%/%postname%/
Details about my local server:
Xubuntu 18
Apache2
AllowOverride All for both / and var/www/
it's on Composer, with custom dir (wp-content is seperated from wp core)
.htaccess:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /project/public/wp/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /project/public/wp/index.php [L]
</IfModule>
# END WordPress
What I have tried:
http://dejanjanosevic.info/remove-index-php-permalink-in-wordpress/
http://derekmolloy.ie/remove-index-php-from-your-wordpress-url/
updating permalinks
updating composer
selling my soul to Satan
What are the results?
Modyfying .htaccess has no effect - just ends in 404, the only links that work are still the ones that include /index.php/. Updating permalinks from WordPress has same result.
I'm running out of ideas here.
I've got it.
For anyone looking for a solution to the same problem, here's guide:
Change permalink settings in wp-admin to pretty permalinks
Install mod_rewrite module in apache
The most important part, in etc/apache/apache2.conf (NOTE THAT YOU MUST CHANGE THE NAME OF FOLDER):
<Directory />
Options FollowSymLinks
AllowOverride All
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
#<Directory /srv/>
# Options Indexes FollowSymLinks
# AllowOverride None
# Require all granted
#</Directory>
<Directory "/var/www/html/NAME_OF_YOUR_PROJECT_FOLDER">
Options FollowSymLinks
AllowOverride All
</Directory>*
Restart apache

Apache .htaccess not being read

I can't seem to figure this out. I'm using Apache 2.4.7 on Ubuntu 14.04 and I have mod_headers enabled. In my /etc/apache2/apache2.conf file, I have the following default Directory statements:
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
I'm trying to override the default apache2.conf config by using VirtualHosts for my actual website directory in /etc/apache2/sites-available/000-default.conf:
<VirtualHost *:80>
ServerAdmin blahblah#123456.so
ServerName 999.999.999.999
DocumentRoot /var/www/html/domains/website1
<Directory /var/www/html/domains/website1>
Options -Indexes +FollowSymLinks
AllowOverride All
Order Deny,Allow
Allow from all
</Directory>
</VirtualHost>
The website works just fine but whenever I try to enable SEO friendly URLs, I get a 404 error stating the page does not exist. Here's the .htaccess file located in /var/www/html/domains/website1/ (It's a standard Wordpress .htaccess file):
# BEGIN WordPress
<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
Any ideas would be greatly appreciated. Thanks!
Silly me. I figured it out as I was filling out the Tags section of the form and the tag mod-rewrite popped up as one of the suggestions. I needed mod_rewrite enabled! Durp. Well, thanks to the stackoverflow web developers for building that feature into the site :)

VirtualHost Gives some 404 Not Found Error on Resources Wordpress Site

I have a wordpress site located on
/var/www/html/site
so I wanted to setup a Virtual host for Apache 2.4
<VirtualHost *:80>
DocumentRoot "/var/www/html/site"
ServerName www.site.com
<Directory "/var/www/html/site">
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>
But while most of the resources do load, a lot of fonts and scripts are giving a Error 404 Not Found. Why is this?
Also what can I do? Are they restricting some but not others?
EDIT: Here's Some errors we're getting.
GET http://52.16.22.15/site/wp-content/plugins/djd-site-post/css/display.css?ver=4.0.1
52.16.22.15/:41
GET http://52.16.22.15/site/wp-content/plugins/codecanyon-5299073-bugmebar-a-simple-little-notification-plugin/bugme.css?ver=1.0.4
52.16.22.15/:46
As most of the site works, only some get requests are failing to get resources. I noticed it's mostly scripts and stylesheets.
This is what I have in my directory .htaccess
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /site/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /site/index.php [L]
</IfModule>
# END WordPress
# BEGIN wtwp_cache
# END wtwp_cache
# BEGIN wtwp_security
# END wtwp_security
There's more but it's on the level one above. But I am also reading that VirtualHost directories do not inherit .htaccess from parent directories. IS this true?
Try adding AllowOverride All
Like this,
<Directory "/var/www/html/site">
Order allow,deny
AllowOverride All
Allow from all
Require all granted
</Directory>

HTTP 404 with Post name permalink

Okay so I've just create the first page on this site. It works when I use the default permalink settings.
If I change the permalink settings to use Post name, then I get an HTTP 404.
I'm not sure what's gone wrong or if I've broken anything. Can anyone help me fix?
The site is hosted on apache.
Are you using XAMPP or MAMP? There are a couple of common hiccups with those environments, taken from the WordPress Codex: Fixing Permalink Problems
Users of XAMPP (Windows): Some versions of XAMPP do not enable
mod_rewrite by default (though it is compiled in Apache). To enable it
— and thus enable WordPress to write the .htaccess file needed to
create pretty permalinks — you must open apache/conf/httpd.conf and
uncomment the line LoadModule rewrite_module modules/mod_rewrite.so
(i.e., delete the hash/pound sign at the front of the line).
Users of WAMP (Windows): Some versions of WAMP (all versions?) do not
enable mod_rewrite or permit following SymLinks by default. To enable
the required functionality navigate to the apache/conf/httpd.conf
file, open with a text editor and uncomment the line LoadModule
rewrite_module modules/mod_rewrite.so (i.e., delete the hash/pound
sign at the front of the line). Then further down in the same file
there is a section that starts with the line "Options FollowSymlinks".
Change the second line in that section from "AllowOverride none" to
AllowOverride all. Save edited httpd.conf and restart all WAMP
modules. Your permalinks should now work.
You might also see Permalinks without mod_rewrite if your sandbox doesn't have mod_rewrite available.
Apache
If you are using Apache there are usually two other culprits to broken permalinks: .htaccess isn't being generated (because of permissions settings) or Apache's AllowOverride directive isn't enabled.
First, if you SSH into your server, do you see a generated .htaccess file in the root? If not, WordPress might not have permissions to write that file. It's also possible the file does exist, but that WordPress cannot edit it. In either case, you can chmod that file (and create it if it doesn't exist) to 666.
Next, ensure your Apache config has the following settings:
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
Finally, read through the Fixing Permalink Problems section of the WordPress Codex. There are several other tips and suggestions on why permalinks might not work.
In my case, firstly I had to update the .htaccess file inside my website root folder:
# BEGIN WordPress
<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
WordPress does this automatically if it has write permission. Otherwise it'll complain it can't write to it, and give the above code sample so you can manually update the .htaccess.
After that, I edited the apache2.conf file. In Linux, it resides in /etc/apache2/apache2.conf, there will be a section like this:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
Change AllowOverride None to AllowOverride FileInfo.
Finally, execute the following commands:
sudo a2enmod rewrite
service apache2 restart
All these steps were necessary in order to work.
found this post on another site helped many people already
I finally managed to solve the problem! The solution: I was using a custom permalink structure http://kyl.fi/%category%/%postname%/. I removed the trailing slash (i.e. the last /) and voila. However, I'm quite sure I used a permalink structure with the trailing slash before without any problems, so I'm still confused and would be interested the hear more about this issue if somebody has an explanation.
All the standard permalinks have a trailing / in there.
in centos 8 and apache 2.4
look in /etc/httpd/conf.d
in your site .conf file add AllowOverride All, example like this
<Directory /path/to/site>
#add the following setting to allow .htaccess in your web dir to work
AllowOverride All
</Directory>
MY 80 LISTEN PORT
#Listen 80
<VirtualHost *:80>
DocumentRoot "/var/www/mysite.com"
ServerName www.mysite.com
# Other directives here
<Directory "/var/www/mysite.com">
Options FollowSymLinks
AllowOverride All
</Directory>
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.mysite.com [OR]
RewriteCond %{SERVER_NAME} =mysite.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
MY SSL VIRTUAL HOST:
<IfModule mod_ssl.c>
<VirtualHost *:443>
DocumentRoot "/var/www/mysite.com"
ServerName www.mysite.com
# Other directives here
<Directory "/var/www/mysite.com">
Options FollowSymLinks
AllowOverride All
</Directory>
ServerAlias mysite.com
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/mysite.com/fullchain.pem
SSLCertificateKeyFile /live/mysite.com/privkey.pem
</VirtualHost>
</IfModule>
Restart apache service.
Check your .htaccess (in my site the .htaccess is located in /var/www/mysite.com
My .htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^helloWorld/?$ /index.php [NC,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
look helloWorld rewrite rule.
If you invoke url www.mysite.com/helloWorld and the browser show your homepage, the configuration is working and the permalink path to site works.
In my case, I am using the NGINX web browser with my WordPress installation. The fix is to add the following code snippet to the NGINX Directives:
location / {
try_files $uri $uri/ /index.php?$args;
}
# Add trailing slash to */wp-admin requests.
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
location ~* \.(jpg|jpeg|png|gif|css|js|ico)$ {
expires max;
log_not_found off;
}
If you are using the excellent (open source) ISPconfig.org CPanel substitute, then go to your Sites page, under the Options tab, enter the above code snippet for NGINX Directives. ISPconfig has a feature to add common code snippets for quick access under the Options tab.
After making the above fix, I was able to use any of WordPress' Permalinks options.
Tested Working Solution:
in your apache2 config file for example:
/etc/apache2/sites-enabled/000-default.conf or mysite.conf etc ..
Make sure you have set param and not empty: ServerName www.example.com or 123.212.333.111
Also make sure You have set directory rules as below (Your rewrite rules may not have taken effect in the .htaccess hence you put it here and try finding out Why .htaccess does not work .htaccess not working apache):
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</Directory>
Must be 2 point check:
1. Add code to .htaccess file:
# BEGIN WordPress
<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
And Permission of .htaccess file, must be: 644
My solution was add this code in /etc/apache2/sites_available/000-default.conf
<Directory "/var/www/mysite.com">
Options FollowSymLinks
AllowOverride All
</Directory>
I'm on Apache 2.4.46 (Ubuntu)
Thank you

Resources