n:href link a jeho podivné chování na IIS

vmrosti
Člen | 6
+
0
-

Zdravím lidičky,

jsem začátečník a trochu se peru s nette. Aktuálně řeším podivné chování web.config na IIS serveru (a nebo mám špatně kód:-))
Trochu z historie: V začátku jsem měl problém vůbec web spustit a nakonec se mi to povedlo až když jsem na serveru nastavil root přímo do složky www. (ani úpravy web.config nepomohly tzv. web.config vypadal takto a stejně nefungova:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <directoryBrowse enabled="true" />
        <rewrite>
            <rules>
                <rule name="presun">
                    <match url=".*" />
                    <action type="Rewrite" url="/www/" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

)

Teď mi ale přijde že právě root ze serveru do složky www mi zase dělá chaos v routeru protože ikdyž v layout.latte odkazuju v menu na presenter s rozdílným vstupem var1 a var2:

<li class="nav-item dropdown">
        <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown">Promenne</a>
        <ul class="dropdown-menu dropdown-menu-right mega-menu" aria-labelledby="navbarDropdown">
          <a n:href="DetailProduction:show var1" class="dropdown-item">var1</a>
          <a n:href="DetailProduction:show var2" class="dropdown-item">var2</a>
          <div class="dropdown-divider"></div>
          <a class="dropdown-item" href="#">něco dalšího zde</a>
        </ul>
      </li>

tak mi to i přes ErrorPresenter nebo Tracy hází chybu od serveru
HTTP Error 404.0 – Not Found
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

a to proto protože má za mně dost divnou cestu. Tu vypisuje jako:
Requested URL http://dbviz:80/…ction/action
Physical Path C:\inetpub\wwwroot\www\detail-production\action

Máte prosím někdo radu? A buďte shovívaví prosím. Zkouším to teprve chvíli a od html a základů PHP je to dost jinde:-D

Editoval vmrosti (25. 4. 2022 9:13)

Pepino
Člen | 249
+
+1
-

@vmrosti možná to je úplně mimo ale v nějakém starším projektu jsem našel web.config pro nette jiný než máš ty. Ve složce www.

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

<!-- IIS configuration file -->

<configuration>
	<system.webServer>
		<rewrite>
			<rules>
				<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>
		<defaultDocument>
			<files>
				<add value="index.php" />
			</files>
		</defaultDocument>
	</system.webServer>
</configuration>

Pak jen OT, proč používáš IIS?

Editoval Pepino (25. 4. 2022 9:22)

vmrosti
Člen | 6
+
0
-

Pepino napsal(a):

@vmrosti možná to je úplně mimo ale v nějakém starším projektu jsem našel web.config pro nette jiný než máš ty. Ve složce www.

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

<!-- IIS configuration file -->

<configuration>
	<system.webServer>
		<rewrite>
			<rules>
				<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>
		<defaultDocument>
			<files>
				<add value="index.php" />
			</files>
		</defaultDocument>
	</system.webServer>
</configuration>

Pak jen OT, proč používáš IIS?

Tak co si budeme, dobrovolně takový blázen nejsem a dost problémů by to vyřešilo. Bohužel taková už je IT politika u nás.
A k web.config – No teď je otázka zda zachovat na kořenu aplikace ten můj a poté vložit do www ten váš (což aktuálně nefunguje a IISsku se nelíbí duplikace add value=„index.php“ (error: Cannot add duplicate collection entry of type ‚add‘ with unique key attribute ‚value‘ set to ‚index.php‘)

Pepino
Člen | 249
+
0
-

@vmrosti a nemáš přímo na ISS nastavený defaultDocument? Ale nevím, střílím od boku.

vmrosti
Člen | 6
+
0
-

Pepino napsal(a):

@vmrosti a nemáš přímo na ISS nastavený defaultDocument? Ale nevím, střílím od boku.

No právě že jak jsem psal tak mám, možná jsem v tom udělal sám trochu chaos:-D v nastavení sítě mám Defalut Web Site s cestou C:\inetpub\wwwroot\www (původně byla cesta jen C:\inetpub\wwwroot ale to pak nefungovala celá aplikace takto mi alespoň aplikace startuje)
Ve složce wwwroot kde je celá aplikace včetně podsložek je web.config viz. ten co jsem sem sdílel tzv.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <directoryBrowse enabled="true" />
        <rewrite>
            <rules>
                <rule name="presun">
                    <match url=".*" />
                    <action type="Rewrite" url="/www/" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

Přidáním toho mi v IIS manageru ukazuje že je tam použita URL Rewrite (kdyby se sem dal vložit obrázek tak to sem šupnu)

Pak jsem teda ještě šoupnul do složky www ten váš web.config což se teď možná trochu bije. Ale prakticky takto funguje i htaccess něco je v kořenu a něco je ve složce www. Úplně ideální by bylo kdyby se dalo použít už toto video kde se jen importuje htaccess které vytvoří samo nette ale to bohužel nefunguje https://www.vrtak-cz.net/…te-framework. IIS nezná RewriteBase

Pepino
Člen | 249
+
+1
-

@vmrosti zkus do té složky www dát. Je to to samé co jsem posílal akorát bez defaultDocument. Nebo prostě někde musíš nadefinovat aby každý request (krom existujících souborů/adresářů) šel na index.php.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<system.webServer>
		<rewrite>
			<rules>
				<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>
vmrosti
Člen | 6
+
0
-

Pepino napsal(a):

@vmrosti zkus do té složky www dát. Je to to samé co jsem posílal akorát bez defaultDocument. Nebo prostě někde musíš nadefinovat aby každý request (krom existujících souborů/adresářů) šel na index.php.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<system.webServer>
		<rewrite>
			<rules>
				<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>

Super toto pomohlo. Díky moc