.htaccesss RewriteCond %{REQUEST_FILENAME} !-d does not work

I want to install WordPress in subdirectory and remove index.php in permalinks.
The server is IIS 6.0, support rewrite.
My webserver has the following directories:

webroot
–wp [wordpress folder]

Read More

webroot/.htaccess

RewriteCond %{HTTP_HOST} ^(www.)?a.luckyet.com$ [NC]
RewriteCond %{REQUEST_URI} !^/wp/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /wp/$1
RewriteCond %{HTTP_HOST} ^(www.)?a.luckyet.com$ [NC]
RewriteRule ^(/)?$ wp/

webroot/wp/.htaccess

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f #1
RewriteCond %{REQUEST_FILENAME} !-d #2
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] #3

It works when I visit a.luckyet.com and a.luckyet.com/hello-world.html
But it does not work when I visit a.luckyet.com/wp-login.php or a.luckyet.com/wp-admin

The #3 works fine, but #1 and #2 can not work properly. Then I saw here and change the content of webroot/wp/.htaccess to:

RewriteEngine on 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

It still does not take effect. Can anyone help me? Thanks in advance!

Update:

ISAPI_Rewrite version is 3.0.

All code in webroot/.htaccess:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?a.luckyet.com$ [NC]
RewriteCond %{REQUEST_URI} !^/wp/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /wp/$1
RewriteCond %{HTTP_HOST} ^(www.)?a.luckyet.com$ [NC]
RewriteRule ^(/)?$ wp/

All code in webroot/wp/.htaccess:

RewriteEngine on 
# For file-based wordpress content (i.e. theme), admin, etc.
RewriteRule wp-(.*) wp-$1 [L]
# For normal wordpress content, via index.php
RewriteRule ^/$ index.php [L]
RewriteCond %{REQUEST_FILENAME} !-f #1
RewriteCond %{REQUEST_FILENAME} !-d #2
RewriteRule (.*) index.php/$1 [L]

WordPress permalink is:

/%postname%.html

Thus, WordPress can work fine when visit http://a.luckyet.com/ or http://a.luckyet.com/hello-world.html

Question:

If there is a real file like a.html in webroot/wp/, like webroot/wp/a.html, wordpress 404 error will be reported when visit http://a.luckyet.com/a.html, . How can I fixed this?

Related posts

Leave a Reply

1 comment

  1. You’re dynamically rewriting the URLs with the .htaccess file and WordPress settings to tack on the .html extension – any files that are “real-life” .html files are being handled upstream by the IIS Handler Mappings.

    You’ll have to update your Handler Mappings in IIS for .html files especially to direct the requests directly to the physical file.