“在此服务器上找不到请求的URL / projectname / pagename /。”WordPress网站上的问题

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.

enter image description here

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