Title: WordPress permalink issues
Last modified: September 9, 2018

---

# WordPress permalink issues

 *  Resolved [mark8887](https://wordpress.org/support/users/mark8887/)
 * (@mark8887)
 * [7 years, 8 months ago](https://wordpress.org/support/topic/wordpress-permalink-issues-2/)
 * I am running an AWS medium LAMP instance. I have three beta testing WordPress
   sites all are running and rendering pages, none are 100% complete. Server software
   versions are:
 *     ```
       php 7.0.3
   
       httpd apache/2.4.33
   
       Wordpress 4.9.8
       ```
   
 * I have spend considerable time researching my particular challenge, including
   writing some plugin code to attempt understanding the problem, I’m getting close
   but have not cracked the problem just yet.
 * The issue I am experiencing, is when I change my permalink settings to %postname%
   the site is unable to locate the pages. At this stage I am exclusively referencing
   only pages and not posts. I have not done any testing with posts.
 * I have confirmed that mod_rewrite is loaded using
 * `sudo apachectl -t -D DUMP_MODULES`
    and `<?php phpinfo(); ?>`
 * The first command lists rewrite_module (shared) as present. The php script shows
   mod_rewrite as being part of the Loaded modules.
 * A good resource I followed was [https://serverfault.com/questions/445599/enabling-mod-rewrite-on-amazon-linux](https://serverfault.com/questions/445599/enabling-mod-rewrite-on-amazon-linux).
   There were numerous others but this seemed to grasp all the salient points, that
   other searching brought up.
 * From the above I took the advice on testing redirection and it worked, routing
   one of my domains to wordpress.org. (to achieve this test i edited /etc/httpd/
   conf/httpd.conf)
 * > Please try this: In the server configuration – not .htaccess add the lines 
   > RewriteEngine On and RewriteRule ^(.*)$ [http://www.wordpress.org/](http://www.wordpress.org/)[
   > R] to confirm if rewrite is functioning at all. It should pass all traffic 
   > to the WordPress website
 * Also I have created a basic plugin to test various WordPress functions. I thought
   that some internal misalignment might have caused WordPress not to find the requested
   page. This was wrong WordPress found the correct page when passing the page ID
   into the get_permalink() function.
 * I simply added an echo get_permalink(290); to my simple plugin code. And this
   correctly echoed
 * `https://www.mydomainname.com/correct-slug-for-page-290`
 * If I copy and paste the URL above it failed.
 * Note: When I modify my permalink settings the .htaccess file is automatically
   modified/updated.
 * If I set my WordPress permalink settings to plain, everything works.
 * If I set my WordPress permalink settings to custom and use index.php/%postname%/
   all links resolve. (Both with and without .htaccess file present)
 * If I set my permalink settings to only %postname% everything becomes a 404 error.
   On setting to %postname% wordpress automatically creates the following file
 *     ```
       -rw-r--r-- 1 apache www 235 Sep  4 21:47 .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
       ```
   
 * Snippets from my httpd.conf with most of the comments are edited out. I do plan
   on going back and tightening up some of the settings once I can get this base
   functionality to work.
 * Appreciate any insights, tips or suggestions. Thanks everyone.
 *     ```
       #
       ServerRoot "/etc/httpd"
   
       Listen 80
   
       Include conf.modules.d/*.conf
   
       User apache
       Group apache
   
       ServerAdmin root@localhost
   
       <Directory />
           AllowOverride All
           Require all granted
       </Directory>
   
       DocumentRoot "/var/www/html"
   
       #
       # Relax access to content within /var/www.
       #
       <Directory "/var/www">
           AllowOverride All
           # Allow open access:
           Require all granted
       </Directory>
   
       # Further relax access to the default document root:
       <Directory "/var/www/html">
           Options Indexes FollowSymLinks
   
           AllowOverride All
   
           Require all granted
       </Directory>
   
       #
       # DirectoryIndex: sets the file that Apache will serve if a directory
       # is requested.
       #
       <IfModule dir_module>
           DirectoryIndex index.html
       </IfModule>
   
       #
       # The following lines prevent .htaccess and .htpasswd files from being 
       # viewed by Web clients. 
       #
       <Files ".ht*">
           Require all denied
       </Files>
   
       <IfModule alias_module>
           ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
   
       </IfModule>
   
       <Directory "/var/www/cgi-bin">
           AllowOverride None
           Options None
           Require all granted
       </Directory>
   
       <IfModule mime_module>
           TypesConfig /etc/mime.types
   
           AddType application/x-compress .Z
           AddType application/x-gzip .gz .tgz
   
           AddType text/html .shtml
           AddOutputFilter INCLUDES .shtml
       </IfModule>
   
       EnableSendfile on
   
       # Supplemental configuration
       #
       # Load config files in the "/etc/httpd/conf.d" directory, if any.
       IncludeOptional conf.d/*.conf
   
       <VirtualHost *:80>
           ServerAdmin webmaster@beta-test-one.com
           DocumentRoot /var/www/html/beta-test-one.com
           ServerName beta-test-one.com
           ServerAlias www.beta-test-one.com
           RewriteEngine On
           <IF "req('Host') != 'www.beta-test-one.com'">
           RewriteCond %{HTTP:X-Forwarded-Proto} =http
           RewriteRule .* https://www.%{HTTP:Host}%{REQUEST_URI} [L,R=301]
           </IF>
           <ELSE>
           RewriteCond %{HTTP:X-Forwarded-Proto} =http
           RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=301]
           </ELSE>
           ErrorLog logs/beta-test-one.com-error_log
           CustomLog logs/beta-test-one.com-access_log common
       </VirtualHost>
       <VirtualHost *:80>
           ServerAdmin webmaster@beta-test-two.com
           DocumentRoot /var/www/html/beta-test-two.com
           <Directory "/var/www/html/beta-test-two.com">
           AllowOverride All
           </Directory>
           ServerName beta-test-two.com
           ServerAlias www.beta-test-two.com
           RewriteEngine On
           <IF "req('Host') != 'www.beta-test-two.com'">
           RewriteCond %{HTTP:X-Forwarded-Proto} =http
           RewriteRule .* https://www.%{HTTP:Host}%{REQUEST_URI} [L,R=301]
           </IF>
           <ELSE>
           RewriteCond %{HTTP:X-Forwarded-Proto} =http
           RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=301]
           </ELSE>
           ErrorLog logs/beta-test-two.com-error_log
           CustomLog logs/beta-test-two.com-access_log common
       </VirtualHost>
       <VirtualHost *:80>
           ServerAdmin webmaster@beta-test-three.com.au
           DocumentRoot /var/www/html/beta-test-three.com.au
           ServerName beta-test-three.com.au
           ServerAlias www.beta-test-three.com.au
           RewriteEngine On
           <IF "req('Host') != 'www.beta-test-three.com.au'">
           RewriteCond %{HTTP:X-Forwarded-Proto} =http
           RewriteRule .* https://www.%{HTTP:Host}%{REQUEST_URI} [L,R=301]
           </IF>
           <ELSE>
           RewriteCond %{HTTP:X-Forwarded-Proto} =http
           RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=301]
           </ELSE>
           ErrorLog logs/beta-test-three.com-error_log
           CustomLog logs/beta-test-three.com-access_log common
       </VirtualHost>
       ```
   

Viewing 4 replies - 1 through 4 (of 4 total)

 *  [Joy](https://wordpress.org/support/users/joyously/)
 * (@joyously)
 * [7 years, 8 months ago](https://wordpress.org/support/topic/wordpress-permalink-issues-2/#post-10672182)
 * Perhaps the problem is not in the htaccess file or your server settings, but 
   in the rewrite rules. Did you try something like this plugin?
    [https://wordpress.org/plugins/debug-bar-rewrite-rules/](https://wordpress.org/plugins/debug-bar-rewrite-rules/)
   [https://wordpress.org/plugins/rewrite-rules-inspector/](https://wordpress.org/plugins/rewrite-rules-inspector/)
 * Did you flush the rewrite rules? Did you save Permalinks twice in a row? Do you
   have posts with the same name as pages?
 *  Thread Starter [mark8887](https://wordpress.org/support/users/mark8887/)
 * (@mark8887)
 * [7 years, 8 months ago](https://wordpress.org/support/topic/wordpress-permalink-issues-2/#post-10675395)
 * Thank you so much for your reply. I have installed the rewrite rules inspector
   plugin. As you suggested it does appear to be an issue with the rewrite rules.
 * Apart from choosing the simple option from WordPress -> Permalinks **every other
   permalink option** gives me the default of prefixing index.php on the rewrite.
 * I am investigating this and will likely write my custom function. Strange that
   it works for so many other people out of the box.
 * E.g. below is how the rewrite rule for the page entry and how this interpreted
   when I set to /%postname%/ the rewrite still has index.php.
 * (.?.+?)/page/?([0-9]{1,})/?$ index.php?pagename=$matches[1]&paged=$matches[2]
   page
 * After installing the plugin I did flush the rewrite rules and saved the Permalinks
   twice in a row. I can confirm that there are no posts and pages with the same
   name.
 * Thanks again.
 *  [Joy](https://wordpress.org/support/users/joyously/)
 * (@joyously)
 * [7 years, 8 months ago](https://wordpress.org/support/topic/wordpress-permalink-issues-2/#post-10678904)
 * Well, that entry is for a page subsequent to the first page of something. In 
   other words, domain/mygreatpage is the first page and the second page is domain/
   mygreatpage/page/2 or domaim/category/mycat is the first page and the second 
   page is domain/category/mycat/page/2.
 * But you should read up on rewrite rules (the WP ones), because you don’t actually
   see the URL like the second half shows. The address bar doesn’t change from the
   pretty permalink.
 *  Thread Starter [mark8887](https://wordpress.org/support/users/mark8887/)
 * (@mark8887)
 * [7 years, 8 months ago](https://wordpress.org/support/topic/wordpress-permalink-issues-2/#post-10679270)
 * The problem is now solved.
 * I must re-iterate again how much of a lifesaver your comment was in terms of 
   getting me on a different line of thought.
 * I started reviewing my mod_rewrite setup. I realized that I had tested from within
   the httpd.conf file but not tested redirection at the .htaccess level following
   some tips from the following article,
 * > [https://docs.bolt.cm/3.4/howto/making-sure-htaccess-works](https://docs.bolt.cm/3.4/howto/making-sure-htaccess-works)
 * It ended up that the .htaccess file was being bypassed.
 * The ultimate culprit were the explicit re-directs to https in the httpd.conf 
   file
 *     ```
           RewriteEngine On
           <IF "req('Host') != 'www.beta-test-three.com.au'">
           RewriteCond %{HTTP:X-Forwarded-Proto} =http
           RewriteRule .* https://www.%{HTTP:Host}%{REQUEST_URI} [L,R=301]
           </IF>
           <ELSE>
           RewriteCond %{HTTP:X-Forwarded-Proto} =http
           RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=301]
           </ELSE>
       ```
   
 * I removed these lines and tested again… The standard WordPress permalinks are
   all resolving. I had initially added those lines because when I had been typing
   domain-name.com (without the https prefix) I was getting browser messages that
   the site is not secure.
 * However by updating the wp-config file as follows (see below) I don’t need the
   https redirection in the httpd.conf file and this has allowed the .htaccess rewrite
   rules to work.
 *     ```
       define('WP_HOME','https://www.domain-name.com');
       define('WP_SITEURL','https://www.domain-name.com');
   
       if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
              $_SERVER['HTTPS']='on';
       ```
   

Viewing 4 replies - 1 through 4 (of 4 total)

The topic ‘WordPress permalink issues’ is closed to new replies.

 * In: [Fixing WordPress](https://wordpress.org/support/forum/how-to-and-troubleshooting/)
 * 4 replies
 * 2 participants
 * Last reply from: [mark8887](https://wordpress.org/support/users/mark8887/)
 * Last activity: [7 years, 8 months ago](https://wordpress.org/support/topic/wordpress-permalink-issues-2/#post-10679270)
 * Status: resolved

## Topics

### Topics with no replies

### Non-support topics

### Resolved topics

### Unresolved topics

### All topics
