For my WordPress project, I am getting the error The requested URL /projectname/pagename/ was not found on this server.
when I try to set the permalink to Postname: http://10.60.8.118/projectname/sample-post/
. The project is hosted on my Ubuntu machine.
I am able to view the pages or posts with permalinks set as Plain: http://10.60.8.118/projectname/?p=123
Earlier .htaccess was not writable. So I changed it and now it is writable.
content of .htaccess
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /devcounsyl/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
The above settings does not work. I have also tried changing the base to / (I guess it should be /devcounsyl/ but none of them works.)
content of .htaccess
# 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
Also tried: Changing file and folder permissions assuming that that might be causing the issue:
find . -type d -exec chmod 775 {} \;
find . -type f -exec chmod 664 {} \;
database urls:
wp_options
table has the value http://10.60.8.118/devcounsyl
for siteurl
and home
Project structure:
/var/www/html/devcounsyl/
The WordPress files are in the project folder and also the .htaccess
file is in devcounsyl
project folder.
Turns out that .htaccess
was not the issue for me. The issue was in server configuration file. Posting my answer in case any one bumps into similar issue and looking for a solution.
For AWS EC2 server:
Step 1: Edit configuration file
sudo nano /etc/httpd/conf/httpd.conf
Edit this file and change
<Directory /var/www/html/wordpress/>
AllowOverride None
</Directory>
to
<Directory /var/www/html/wordpress/>
AllowOverride All
</Directory>
Note that here, /var/www/html/wordpress/
is path to the root folder where WordPress project was hosted.
Step 2: Restart server
Please don't forget to restart your server after you do the changes to the .conf
file.
sudo service httpd restart
For Ubuntu server:
Step 1: Edit configuration file
sudo gedit /etc/apache2/apache2.conf
Edit this file and change
<Directory /var/www/html/wordpress/>
AllowOverride None
</Directory>
to
<Directory /var/www/html/wordpress/>
AllowOverride All
</Directory>
Note that here, /var/www/html/wordpress/
is path to the root folder where WordPress project was hosted.
Step 2: Restart server
Please don't forget to restart your server after you do the changes to the .conf
file.
sudo service apache2 restart
If WordPress is installed in a subdirectory then you should move your .htaccess
into that subdirectory (if not already) and remove the slash prefix from the RewriteRule
substitution, otherwise the RewriteBase
directive will have no effect. For example:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
# RewriteBase is not required if .htaccess file is in the /devcounsyl dir
#RewriteBase /devcounsyl/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>
# END WordPress
Although, if the .htaccess
file is already in the /devconsyl
subdirectory, then the RewriteBase
directive is not actually required (providing you remove the slash prefix from the RewriteRule
substitution, as mentioned above).
The .htaccess
file would need to be in the WordPress subdirectory for the first RewriteRule
to match. (ie. RewriteRule ^index\.php$ - [L]
)
By removing the slash prefix, you are making the substitution relative to the directory containing the .htaccess
file. The RewriteBase
only applies to relative substitutions and simply overrides the default (relative) path.
If, however, the .htaccess
file is located in the document root of your domain (ie. not the WordPress root) then you would need to modify your .htaccess
like this:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
# RewriteBase is required if .htaccess file is in document root
RewriteBase /devcounsyl/
RewriteRule ^devcounsyl/index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>
# END WordPress