Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

we have a WordPress website running on IIS 8.0 in a shared hosting environment. Permalinks are set on Post name. Web.config has been edited on purpose (please find that below). Site root contains wp-config.php, index.php, Web.config files, the rest has been moved in wordpress subdirectory.

We just found out recently that www.domain.com/wp-admin does not work. It redirects to www.domain.com/wp-admin/ and returns a 404.0 IIS error page.

  1. Public site pages are all accessible.
  2. www.domain.com/wordpress/wp-admin redirects to www.domain.com/wordpress/wp-admin/ and shows login page fine
  3. www.domain.com/login redirects to www.domain.com/wordpress/wp-login.php and shows login page fine
  4. This hosted environment is for staging. On our development machine site runs on Apache and all is fine, also localhost/siteroot/wp-admin. So we guess it should be a matter of Web.config

Here is current Web.config for completeness. We got it from some source on the web, don't remember where. We tried both with and without defaultDocument node, with no effect. We also search here on StackExchange for similar issue, with no luck.

<?xml version="1.0" encoding="UTF-8"?>
                <remove value="index.php" />
                <add value="index.php" />
                <rule name="WordPress Rule 1" stopProcessing="true">
                    <match url="^index\.php$" ignoreCase="false" />
                    <action type="None" />
                <rule name="WordPress Rule 2" stopProcessing="true">
                    <match url="^([_0-9a-zA-Z-]+/)?files/(.+)" ignoreCase="false" />
                    <action type="Rewrite" url="wp-includes/ms-files.php?file={R:2}" appendQueryString="false" />
                <rule name="WordPress Rule 3" stopProcessing="true">
                    <match url="^([_0-9a-zA-Z-]+/)?wp-admin$" ignoreCase="false" />
                    <action type="Redirect" url="{R:1}wp-admin/" redirectType="Permanent" />
                <rule name="WordPress Rule 4" stopProcessing="true">
                    <match url="^" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAny">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" />
                    <action type="None" />
                <rule name="WordPress Rule 5" stopProcessing="true">
                    <match url="(^[_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*)" ignoreCase="false" />
                    <action type="Rewrite" url="{R:2}" />
                <rule name="WordPress Rule 6" stopProcessing="true">
                    <match url="^([_0-9a-zA-Z-]+/)?(.*\.php)$" ignoreCase="false" />
                    <action type="Rewrite" url="{R:2}" />
                <rule name="WordPress Rule 7" stopProcessing="true">
                    <match url="." ignoreCase="false" />
                    <action type="Rewrite" url="index.php" />
share|improve this question

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.