I just configured my VPS, I am using Centos, everything works fine, but if I am setting my permalinks to Custom Structure, then accept the homepage none of the posts come, it shows me 404 page, I think this is because I haven't enabled curl, but I don't know where is my php.ini file in my centos?

OK my curl is enabled, I checked it through phpinfo(); Here is the URL

But if I am setting any permalinks in my wordpress then accept home page, all are giving me 404 pages You can check it on this URL http://mbas.co.in

If I am keeping the permalink as default then pages are loaded without any 404

I don't know what is the problem, more-over my post-content is not getting loaded, Only the posts title comes, but the content part is missing,


[Tue Feb 01 15:22:47 2011] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Tue Feb 01 15:22:47 2011] [notice] Digest: generating secret for digest authentication ...
[Tue Feb 01 15:22:47 2011] [notice] Digest: done
[Tue Feb 01 15:22:47 2011] [notice] Apache/2.2.3 (CentOS) configured -- resuming normal operations
[Tue Feb 01 15:22:51 2011] [error] [client] File does not exist: /var/www/html/web-hosting-concerns-for-ecommerce-businesses, referer: mysite.com
[Tue Feb 01 15:23:30 2011] [error] [client] File does not exist: /var/www/html/cpcu-vs-mba
[Tue Feb 01 15:23:35 2011] [error] [client] File does not exist: /var/www/html/can-u-see-below-for-growing-opinions-on-write-in-vote-process-in-sa

[Tue Feb 01 15:23:43 2011] [error] [client] File does not exist: /var/www/html/dc-area-financial-strategist-questions-lack-of-regulation-for-tv-financial-gurus

[Tue Feb 01 15:24:15 2011] [error] [client] File does not exist: /var/www/html/is-a-political-science-degree-with-a-business-admin-minor-a-good-idea-feature-jobs-with-that-combo

[Tue Feb 01 15:26:01 2011] [error] [client] File does not exist: /var/www/html/emba-ralph-irizarry-timbalista-de-ruben-blades

My htaccess file

# BEGIN W3TC Page Cache
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_USER_AGENT} (2\.0\ mmp|240x320|alcatel|amoi|asus|au\-mic|audiovox|avantgo|benq|bird|blackberry|blazer|cdm|cellphone|danger|ddipocket|docomo|dopod|elaine/3\.0|ericsson|eudoraweb|fly|haier|hiptop|hp\.ipaq|htc|huawei|i\-mobile|iemobile|j\-phone|kddi|konka|kwc|kyocera/wx310k|lenovo|lg|lg/u990|lge\ vx|midp|midp\-2\.0|mmef20|mmp|mobilephone|mot\-v|motorola|netfront|newgen|newt|nintendo\ ds|nintendo\ wii|nitro|nokia|novarra|o2|openweb|opera\ mobi|opera\.mobi|palm|panasonic|pantech|pdxgw|pg|philips|phone|playstation\ portable|portalmmm|ppc|proxinet|psp|pt|qtek|sagem|samsung|sanyo|sch|sec|sendo|sgh|sharp|sharp\-tq\-gx10|small|smartphone|softbank|sonyericsson|sph|symbian|symbian\ os|symbianos|toshiba|treo|ts21i\-10|up\.browser|up\.link|uts|vertu|vodafone|wap|willcome|windows\ ce|windows\.ce|winwap|xda|zte) [NC]
    RewriteRule .* - [E=W3TC_UA:_low]
    RewriteCond %{HTTP_USER_AGENT} (acer\ s100|android|archos5|blackberry9500|blackberry9530|blackberry9550|cupcake|docomo\ ht\-03a|dream|htc\ hero|htc\ magic|htc_dream|htc_magic|incognito|ipad|iphone|ipod|lg\-gw620|liquid\ build|maemo|mot\-mb200|mot\-mb300|nexus\ one|opera\ mini|samsung\-s8000|series60.*webkit|series60/5\.0|sonyericssone10|sonyericssonu20|sonyericssonx10|t\-mobile\ mytouch\ 3g|t\-mobile\ opal|tattoo|webmate|webos) [NC]
    RewriteRule .* - [E=W3TC_UA:_high]
    RewriteCond %{HTTPS} =on
    RewriteRule .* - [E=W3TC_SSL:_ssl]
    RewriteCond %{SERVER_PORT} =443
    RewriteRule .* - [E=W3TC_SSL:_ssl]
    RewriteCond %{HTTP:Accept-Encoding} gzip
    RewriteRule .* - [E=W3TC_ENC:.gzip]
    RewriteCond %{REQUEST_METHOD} !=POST
    RewriteCond %{QUERY_STRING} =""
    RewriteCond %{REQUEST_URI} \/$
    RewriteCond %{REQUEST_URI} !(\/wp-admin\/|\/xmlrpc.php|\/wp-(app|cron|login|register|mail)\.php|wp-.*\.php|index\.php) [NC,OR]
    RewriteCond %{REQUEST_URI} (wp\-comments\-popup\.php|wp\-links\-opml\.php|wp\-locations\.php) [NC]
    RewriteCond %{HTTP_COOKIE} !(comment_author|wp\-postpass|wordpress_\[a\-f0\-9\]\+|wordpress_logged_in) [NC]
    RewriteCond "/var/www/html/wp-content/w3tc/pgcache/$1/_index%{ENV:W3TC_UA}%{ENV:W3TC_SSL}.html%{ENV:W3TC_ENC}" -f
    RewriteRule (.*) "/wp-content/w3tc/pgcache/$1/_index%{ENV:W3TC_UA}%{ENV:W3TC_SSL}.html%{ENV:W3TC_ENC}" [L]
# END W3TC Page Cache

# 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]
RewriteRule ^index\.php/?(.*)$ $1 [R] 

# END WordPress

The only solution I found was reinstalling the entire Centos, starting all from scratch, and enabling each thing respectively as per the answers, and finally it worked, my Linux was having some problems, thats why it was not working.

  • @ntechi - It's very hard to follow your question. Please consider giving more detail, examples of URLs, screenshots if possible, etc. Commented Feb 2, 2011 at 9:56
  • The php.ini should be in /etc/php.ini but i'm not sure if that is your problem. do you have a .htaccess file configured?
    – Bainternet
    Commented Feb 2, 2011 at 9:58
  • @MikeSchinkel, @בניית אתרים Check my question now Commented Feb 2, 2011 at 10:18
  • 2
    You must have mod_rewrite enabled in the server. Your .htaccess must be enabled, must have the content that is explained on Wordpress page that I've send to you. Finally you can remove the index.php in custom permalink structure. The two basic question are: mod_rewrite is enabled in apache? .htaccess is enabled ?
    – keatch
    Commented Feb 2, 2011 at 11:41
  • 1
    @MikeSchinkel - Done! See my answer below
    – keatch
    Commented Feb 3, 2011 at 10:31

4 Answers 4


You need to add: Options +FollowSymLinks

It's often but not always enabled in most hosting environments. We have a server that has it off by default for PCI compliance.

  • I have added this, still no change Commented Feb 10, 2011 at 7:29
  • 1
    @ntechi: After this has been set -- Have you have flushed the Worpress permalinks by going to Settings -> Permalinks? Commented Feb 10, 2011 at 17:14
  • yes done, still no change Commented Feb 11, 2011 at 4:39
  • 1
    @ntechi: I tweaked your .htaccess file for my local Wordpress copy and couldn't get it working. Why don't you archive your current .htacess file, turn off your caching plugin and use the standard wordpress .htaccess and see if it works in this easy case. Commented Feb 11, 2011 at 18:25

If you enable custom permalinks, wordpress is modifying your .htaccess file, to enable the rewrite of your urls.

As from the from the Codex section Using Permalinks, in your server must be enabled the module "mod_rewrite" (if you are using apache) and the use of .htaccess by the domain in which your blog is installed. Both can be disabled by the administrator, so first check with him.

To enable mod_rewrite for apache, the better way is to enable it via the a2enmod command that come bundled with the majority of linux distribuition.

a2enmod rewrite

and then, reload your apache server, to enable the modification.

Note: If you can't enable mod_rewrite or .htaccess, the best solution for your permalinks, is to enable the "Almost Pretty" version, i.e, prepend index.php/ to you permalink structure in the custom field.

  • I have enabled mod_rewrite, but still without index.php the permalinks are not working Please give me a solution of this, I am really in a mess Commented Feb 3, 2011 at 12:26
  • Check your apache error logs? What are they saying? Also be sure that the Custom permalink is %category%/%postname%.
    – keatch
    Commented Feb 3, 2011 at 14:21
  • check my question for error log, I have changed the permalink as you said, but still I am getting same error Commented Feb 4, 2011 at 4:50
  • Which versione of W3C Cache are you using , and /var/www/html is writable by your webserver ?
    – keatch
    Commented Feb 4, 2011 at 16:37
  • I am using the latest version of W3C Cache, html directory is not writable but the important files inside it, like htaccess, db.php w3c-advanced.php are 777 and wp-content folder is 755 Commented Feb 5, 2011 at 4:36

It could be that APACHE AllowOveride is not correctly set.

Does your .htaccess look anything like this?

# 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]
# END WordPress
  • I dont know about this, but while searching I found something, should I enable all the following things? AuthConfig, FileInfo, Indexes, Limit, Options ? Commented Feb 4, 2011 at 6:11
  • Your webmaster or hosting provider should know how to do this. I had this problem with one client that used a hosting provider that had it turned off. Just had to contact them and have them turn it on. Commented Feb 4, 2011 at 6:13
  • @Jo Albright I am only configuring it, I recently shifted my wordpress website to new unmanaged VPS, This was set already <Directory /> Options FollowSymLinks AllowOverride All </Directory> but don't know about others Commented Feb 4, 2011 at 6:28
  • Your .htaccess should be working then... check to make sure it looks something like what I have added to my answer. Commented Feb 4, 2011 at 6:29
  • @Jo Albright Check my htaccess file Commented Feb 4, 2011 at 6:38

This is almost certainly a rewriting issue - either mod_rewrite isn't being loaded, or your .htaccess file isn't allowed to override your httpd.conf

  1. Make sure mod_rewrite is being loaded - you'll need to check /etc/httpd/conf/httpd.conf and look for a line like: LoadModule rewrite_module modules/mod_rewrite.so. Make sure this line isn't being commented out.

  2. If you've create a virtual host, then make sure you're allowing .htaccess overrides within the section - something like ` AllowOverride All . If you're not using a virtual host, then follow the Override chain in your httpd.conf to make sure that the directory WP is located in can be overridden

  3. Disable w3 total cache (and delete the lines it adds to .htaccess) until you've sorted out your rewriting issue. It just confuses things, and given your site isn't working, caching is the least of your worries.

  4. Check your apache error logs /var/log/httpd and see what they say.

  • all the four steps are done, still same Commented Feb 10, 2011 at 15:51
  • what did your error logs say? pretend that WordPress doesn't exist on your site, and just see if you can make a single rewrite rule work - add it in your httpd.conf if necessary, and bypass .htaccess completely. once you've actually proved that rewrite is working, you can then check overrides in .htaccess.
    – anu
    Commented Feb 10, 2011 at 16:13
  • i'm also wondering if this question shouldnt be migrated to serverfault or webmasters.
    – anu
    Commented Feb 10, 2011 at 16:16

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.