IIS – změna root složky přes web.config

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
wb2009
Člen | 125
+
0
-

Zdravím,

Mám Nette aplikaci ze klasického sandboxu, bohužel naše IT nám připravilo webový server tak, že nemám připravenou www složku. Takže mám vlastně:
root/
-----/www
-----/app
-----/libs
…atd.
Normálně na mém hostingu bych to vyřešil dle pěkného htaccess v https://doc.nette.org/…ubleshooting, ale teď to nevyřeším, jelikož ten server je iis tuším, že 7 a vyšší.

Je něco podobného jako htaccess i pro web.config ?

Nechce se mi to „prasit“ tak, že přesunu obsah www do rootu, určitě se s tím někdo už setkal a má řešení :)

Zdeno1981
Člen | 115
+
0
-

ahoj,
na IIS když vytvoříš nový web tak jej lze nasměrovat přímo do jakékoliv složky i do www, dále pak jestli chceš frendly URLs, je třeba na IIS nainstalovat rewrite modul, který umí importovat pravidla z .htaccess

wb2009
Člen | 125
+
0
-

Zdravím hezké URL mám, to mi jede, ono v sandoxu, je htaccess a web.config pro ty hezké URL. Akorád nevím jak to tedy přesměrovávat do www složky? Resp. něco jsem už na netu našel a zkoušel, ale bez úspěchu.

Edit našel jsem řešení, které redirectne z rootu do složky www:

<?xml version="1.0" encoding="UTF-8"?>

<!-- IIS configuration file -->

<configuration>
<system.webServer>
    <rewrite>
        <rules>
            <rule name="Root Hit Redirect" stopProcessing="true">
                <match url="^$" />
                <action type="Redirect" url="/www/index.php" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>
</configuration>

Ale pořád to není ono protože:

v url pak bude www.domain.cz/www

Editoval wb2009 (3. 6. 2013 9:30)

Zdeno1981
Člen | 115
+
0
-

já to nastavuji tak jak jsem již zmínil, snad screen už bude dostačující: náhled

wb2009
Člen | 125
+
0
-

Já tě chápu, jenomže já to potřebuji nastavit přes web.config, to je to jediné přes co můžu upravovat něco na IIS…

KajaNoName
Člen | 2
+
0
-

Nejjednodušší cesta je vysvětlit vašemu IT, že je potřeba nastavit aplikační root do www :-). Druhá cesta by mohla vypadat nějak takto:

root/web.config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Root fake 1" stopProcessing="true">
                    <match url="(.*\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz))$" ignoreCase="false" />
                    <action type="Rewrite" url="www/{R:1}" />
                </rule>
                <rule name="Root fake 2" stopProcessing="true">
                    <match url="(.*)" ignoreCase="false" />
                    <action type="Rewrite" url="www/index.php" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

root/www/web.config

<?xml version="1.0" encoding="UTF-8"?>

<!-- IIS configuration file -->

<configuration>
	<system.webServer>
		<rewrite>
			<rules>
                <remove name="Root fake 1" />
                <remove name="Root fake 2" />
				<rule name="Rewrite Rule 1" stopProcessing="true">
					<match url="\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$" ignoreCase="false" negate="true" />
					<conditions logicalGrouping="MatchAll">
						<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
						<add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
					</conditions>
					<action type="Rewrite" url="index.php" />
				</rule>
			</rules>
		</rewrite>
	</system.webServer>
</configuration>

Nevýhoda je v tom, že to nekontroluje, jestli url není náhodou soubor nebo složka. Snad to pomůže. Mě to na pár easy testech běželo.

wb2009
Člen | 125
+
0
-

Ano o nejjednodušší cestě vím, ale bez úspěchu :) Díky moc, vyzkouším :)