<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.stephanschlegel.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=134.3.85.26</id>
	<title>Wikizone - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.stephanschlegel.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=134.3.85.26"/>
	<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Spezial:Beitr%C3%A4ge/134.3.85.26"/>
	<updated>2026-05-06T15:24:31Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Front_Page_Editing&amp;diff=25419</id>
		<title>ProcessWire - Front Page Editing</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Front_Page_Editing&amp;diff=25419"/>
		<updated>2021-10-05T08:43:12Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: /* Kopierschnipsel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Front End Page Editor == &lt;br /&gt;
https://processwire.com/docs/front-end/front-end-editing/&lt;br /&gt;
&lt;br /&gt;
Auch genannt: Frontend-Editing oder Frontpage Edit oder Frontend-Editor&lt;br /&gt;
&lt;br /&gt;
* Mehrere Optionen (im Backend auswählen)&lt;br /&gt;
* Option A -&amp;gt; Automatisch&lt;br /&gt;
** Kann verwendet werden wenn ein Feld nur einmal auf einer Seite verwendet wird.&lt;br /&gt;
* Option B -&amp;gt; API Method Call&lt;br /&gt;
** Geeignet für text fields, number fields, dates...&lt;br /&gt;
** Nicht geeignet für Files/Images, PageTables, Repeaters or andere Felder über die man iteriert&lt;br /&gt;
** Statt get einfach edit nehmen&lt;br /&gt;
 &amp;lt;?php echo $page-&amp;gt;edit(&amp;#039;body&amp;#039;); ?&amp;gt;&lt;br /&gt;
* Option C -&amp;gt; HTML Edit Tags&lt;br /&gt;
** Anhand &amp;#039;&amp;#039;&amp;lt;edit [feldname]&amp;gt;...&amp;lt;/edit&amp;gt;&amp;#039;&amp;#039;  findet PW die Felder&lt;br /&gt;
** Für Repeater geeignet&lt;br /&gt;
** Unterstüzt Inline Editor, wenn das Feld es unterstützt&lt;br /&gt;
&lt;br /&gt;
* Option D -&amp;gt; HTML Edit Attributes&lt;br /&gt;
** Gleiche Funktionalität wie Tags&lt;br /&gt;
** edit Attribut für div, span, ... statt eigenständiges Tag&lt;br /&gt;
** always uses the dialog editor and does not use the inline editor.&lt;br /&gt;
 &amp;lt;div edit=&amp;quot;events&amp;quot;&amp;gt;...&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
* PageFrontEdit Modul installieren (Core)&lt;br /&gt;
* Für Option A Checkboxen anhaken&lt;br /&gt;
* Für Option B-C Templates berarbeiten.&lt;br /&gt;
== Options in Detail ==&lt;br /&gt;
=== Option A ===&lt;br /&gt;
Einfach im Backend anhaken&lt;br /&gt;
&lt;br /&gt;
=== Option B ===&lt;br /&gt;
Statt&lt;br /&gt;
 $page-&amp;gt;get(&amp;#039;field_name&amp;#039;);&lt;br /&gt;
 $page-&amp;gt;edit(&amp;#039;field_name&amp;#039;);&lt;br /&gt;
Beispiel &lt;br /&gt;
 &amp;lt;?php echo $page-&amp;gt;edit(&amp;#039;body&amp;#039;); ?&amp;gt;&lt;br /&gt;
=== Option C ===&lt;br /&gt;
&lt;br /&gt;
Beispiel Image Feld &amp;#039;photo&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;edit photo&amp;gt;&lt;br /&gt;
  &amp;lt;img src=&amp;quot;&amp;lt;?=$page-&amp;gt;image-&amp;gt;url?&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/edit&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel Repeater, PageTable oder Table Field&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;edit events&amp;gt;&lt;br /&gt;
  &amp;lt;?php foreach($page-&amp;gt;events as $event): ?&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;event&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h3&amp;gt;&amp;lt;?=$event-&amp;gt;title?&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
      &amp;lt;p class=&amp;quot;date&amp;quot;&amp;gt;&amp;lt;?=$event-&amp;gt;date?&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;&amp;lt;?=$event-&amp;gt;summary?&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;?php endforeach; ?&amp;gt;&lt;br /&gt;
&amp;lt;/edit&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beschreibung von Ryan:&lt;br /&gt;
&lt;br /&gt;
By the way, you can also use some more verbose but alternate syntax for the &amp;lt;edit&amp;gt; tags if you prefer. If your editor does syntax highlighting with your HTML, it may be more consistent (the &amp;quot;quotes&amp;quot; are optional of course):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;events&amp;quot;&amp;gt; ... &amp;lt;/edit&amp;gt;&lt;br /&gt;
If your editable region contains multiple fields you want to be edited together, you can specify more than one:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;intro,image,events&amp;quot;&amp;gt; ... &amp;lt;/edit&amp;gt;&lt;br /&gt;
If your field happens to be on some other page other than the one being rendered, you can also specify what page you want to be edited:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;events&amp;quot; page=&amp;quot;1001&amp;quot;&amp;gt; ... &amp;lt;/edit&amp;gt;&lt;br /&gt;
The 1001 can be any page ID or path. The above can also be shortened to this if you prefer:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;1001.events&amp;quot;&amp;gt; ... &amp;lt;/edit&amp;gt;&lt;br /&gt;
Or this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;edit 1001.events&amp;gt; ... &amp;lt;/edit&amp;gt;&lt;br /&gt;
If you are using &amp;lt;edit&amp;gt; tags with a field that supports inline editing (like a text or CKEditor field), the inline editor will be used. Otherwise it will open a dialog to the editor.&lt;br /&gt;
&lt;br /&gt;
=== Option D ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div edit=&amp;quot;events&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- code to output events --&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Or to specify a field from some other page (1001):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div edit=&amp;quot;1001.events&amp;quot;&amp;gt; ... &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Or to specify multiple fields:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div edit=&amp;quot;intro,image,events&amp;quot;&amp;gt; ... &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;quot;edit&amp;quot; attributes are stripped from the markup that gets output, so the only place you will see them is where you place them in your template file(s).&lt;br /&gt;
&lt;br /&gt;
Worth noting about &amp;#039;&amp;#039;&amp;#039;option D&amp;#039;&amp;#039;&amp;#039; is that it &amp;#039;&amp;#039;&amp;#039;always uses the dialog editor&amp;#039;&amp;#039;&amp;#039; and does not use the inline editor.&lt;br /&gt;
&lt;br /&gt;
== Probleme lösen ==&lt;br /&gt;
=== Front Page Editing in Repeatern ===&lt;br /&gt;
Der Editor zeigt keinen Inhalt. Bei Superadmins funktioniert es aber.&lt;br /&gt;
 https://processwire.com/talk/topic/15357-solved-frontend-edit-on-repeater-fields/&lt;br /&gt;
 https://github.com/processwire/processwire-issues/issues/183&lt;br /&gt;
Lösung: Mit Option C funktioniert es, wenn man noch das page-Attribut mit reinnimmt. Im page Attribut gibt man den Repeater an.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach($page-&amp;gt;repeater_field as $item) {&lt;br /&gt;
  echo &amp;quot;&amp;lt;h3&amp;gt;&amp;lt;edit field=&amp;#039;title&amp;#039; page=&amp;#039;$item&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/edit&amp;gt;&amp;lt;/h3&amp;gt;&amp;quot;;&lt;br /&gt;
  echo &amp;quot;&amp;lt;edit field=&amp;#039;body&amp;#039; page=&amp;#039;$item&amp;#039;&amp;gt;$item-&amp;gt;body&amp;lt;/edit&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Manchmal auch praktisch wenn man mit fields arbeitet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Body&lt;br /&gt;
if($page-&amp;gt;body){&lt;br /&gt;
  $bodyMarkup = &amp;quot;&amp;lt;edit field=\&amp;quot;body\&amp;quot; page=\&amp;quot;$page\&amp;quot;&amp;gt;$page-&amp;gt;body&amp;lt;/edit&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Editor funktioniert nicht immer===&lt;br /&gt;
Die Edit Tags werden aus dem Code entfernt aber man kann nicht doppelklicken.&lt;br /&gt;
&lt;br /&gt;
Prüfen ob du mit einer anderen Domain (z.B. ohne www.) angelmeldet bist. Der Editor funktioniert bei mir nur wenn man in der exakt selben Domain ist.&lt;br /&gt;
&lt;br /&gt;
== Kopierschnipsel ==&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;body&amp;quot;&amp;gt;&amp;#039;.$page-&amp;gt;body.&amp;#039;&amp;lt;/edit&amp;gt;&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;body&amp;quot; page=&amp;quot;&amp;#039;.$page.&amp;#039;&amp;quot;&amp;gt;&amp;#039;.$page-&amp;gt;body.&amp;#039;&amp;lt;/edit&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Front_Page_Editing&amp;diff=25418</id>
		<title>ProcessWire - Front Page Editing</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Front_Page_Editing&amp;diff=25418"/>
		<updated>2021-10-05T08:09:16Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: /* Editor funktioniert nicht (delayed content) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Front End Page Editor == &lt;br /&gt;
https://processwire.com/docs/front-end/front-end-editing/&lt;br /&gt;
&lt;br /&gt;
Auch genannt: Frontend-Editing oder Frontpage Edit oder Frontend-Editor&lt;br /&gt;
&lt;br /&gt;
* Mehrere Optionen (im Backend auswählen)&lt;br /&gt;
* Option A -&amp;gt; Automatisch&lt;br /&gt;
** Kann verwendet werden wenn ein Feld nur einmal auf einer Seite verwendet wird.&lt;br /&gt;
* Option B -&amp;gt; API Method Call&lt;br /&gt;
** Geeignet für text fields, number fields, dates...&lt;br /&gt;
** Nicht geeignet für Files/Images, PageTables, Repeaters or andere Felder über die man iteriert&lt;br /&gt;
** Statt get einfach edit nehmen&lt;br /&gt;
 &amp;lt;?php echo $page-&amp;gt;edit(&amp;#039;body&amp;#039;); ?&amp;gt;&lt;br /&gt;
* Option C -&amp;gt; HTML Edit Tags&lt;br /&gt;
** Anhand &amp;#039;&amp;#039;&amp;lt;edit [feldname]&amp;gt;...&amp;lt;/edit&amp;gt;&amp;#039;&amp;#039;  findet PW die Felder&lt;br /&gt;
** Für Repeater geeignet&lt;br /&gt;
** Unterstüzt Inline Editor, wenn das Feld es unterstützt&lt;br /&gt;
&lt;br /&gt;
* Option D -&amp;gt; HTML Edit Attributes&lt;br /&gt;
** Gleiche Funktionalität wie Tags&lt;br /&gt;
** edit Attribut für div, span, ... statt eigenständiges Tag&lt;br /&gt;
** always uses the dialog editor and does not use the inline editor.&lt;br /&gt;
 &amp;lt;div edit=&amp;quot;events&amp;quot;&amp;gt;...&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
* PageFrontEdit Modul installieren (Core)&lt;br /&gt;
* Für Option A Checkboxen anhaken&lt;br /&gt;
* Für Option B-C Templates berarbeiten.&lt;br /&gt;
== Options in Detail ==&lt;br /&gt;
=== Option A ===&lt;br /&gt;
Einfach im Backend anhaken&lt;br /&gt;
&lt;br /&gt;
=== Option B ===&lt;br /&gt;
Statt&lt;br /&gt;
 $page-&amp;gt;get(&amp;#039;field_name&amp;#039;);&lt;br /&gt;
 $page-&amp;gt;edit(&amp;#039;field_name&amp;#039;);&lt;br /&gt;
Beispiel &lt;br /&gt;
 &amp;lt;?php echo $page-&amp;gt;edit(&amp;#039;body&amp;#039;); ?&amp;gt;&lt;br /&gt;
=== Option C ===&lt;br /&gt;
&lt;br /&gt;
Beispiel Image Feld &amp;#039;photo&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;edit photo&amp;gt;&lt;br /&gt;
  &amp;lt;img src=&amp;quot;&amp;lt;?=$page-&amp;gt;image-&amp;gt;url?&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/edit&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel Repeater, PageTable oder Table Field&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;edit events&amp;gt;&lt;br /&gt;
  &amp;lt;?php foreach($page-&amp;gt;events as $event): ?&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;event&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h3&amp;gt;&amp;lt;?=$event-&amp;gt;title?&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
      &amp;lt;p class=&amp;quot;date&amp;quot;&amp;gt;&amp;lt;?=$event-&amp;gt;date?&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;&amp;lt;?=$event-&amp;gt;summary?&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;?php endforeach; ?&amp;gt;&lt;br /&gt;
&amp;lt;/edit&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beschreibung von Ryan:&lt;br /&gt;
&lt;br /&gt;
By the way, you can also use some more verbose but alternate syntax for the &amp;lt;edit&amp;gt; tags if you prefer. If your editor does syntax highlighting with your HTML, it may be more consistent (the &amp;quot;quotes&amp;quot; are optional of course):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;events&amp;quot;&amp;gt; ... &amp;lt;/edit&amp;gt;&lt;br /&gt;
If your editable region contains multiple fields you want to be edited together, you can specify more than one:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;intro,image,events&amp;quot;&amp;gt; ... &amp;lt;/edit&amp;gt;&lt;br /&gt;
If your field happens to be on some other page other than the one being rendered, you can also specify what page you want to be edited:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;events&amp;quot; page=&amp;quot;1001&amp;quot;&amp;gt; ... &amp;lt;/edit&amp;gt;&lt;br /&gt;
The 1001 can be any page ID or path. The above can also be shortened to this if you prefer:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;1001.events&amp;quot;&amp;gt; ... &amp;lt;/edit&amp;gt;&lt;br /&gt;
Or this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;edit 1001.events&amp;gt; ... &amp;lt;/edit&amp;gt;&lt;br /&gt;
If you are using &amp;lt;edit&amp;gt; tags with a field that supports inline editing (like a text or CKEditor field), the inline editor will be used. Otherwise it will open a dialog to the editor.&lt;br /&gt;
&lt;br /&gt;
=== Option D ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div edit=&amp;quot;events&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- code to output events --&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Or to specify a field from some other page (1001):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div edit=&amp;quot;1001.events&amp;quot;&amp;gt; ... &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Or to specify multiple fields:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div edit=&amp;quot;intro,image,events&amp;quot;&amp;gt; ... &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;quot;edit&amp;quot; attributes are stripped from the markup that gets output, so the only place you will see them is where you place them in your template file(s).&lt;br /&gt;
&lt;br /&gt;
Worth noting about &amp;#039;&amp;#039;&amp;#039;option D&amp;#039;&amp;#039;&amp;#039; is that it &amp;#039;&amp;#039;&amp;#039;always uses the dialog editor&amp;#039;&amp;#039;&amp;#039; and does not use the inline editor.&lt;br /&gt;
&lt;br /&gt;
== Probleme lösen ==&lt;br /&gt;
=== Front Page Editing in Repeatern ===&lt;br /&gt;
Der Editor zeigt keinen Inhalt. Bei Superadmins funktioniert es aber.&lt;br /&gt;
 https://processwire.com/talk/topic/15357-solved-frontend-edit-on-repeater-fields/&lt;br /&gt;
 https://github.com/processwire/processwire-issues/issues/183&lt;br /&gt;
Lösung: Mit Option C funktioniert es, wenn man noch das page-Attribut mit reinnimmt. Im page Attribut gibt man den Repeater an.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach($page-&amp;gt;repeater_field as $item) {&lt;br /&gt;
  echo &amp;quot;&amp;lt;h3&amp;gt;&amp;lt;edit field=&amp;#039;title&amp;#039; page=&amp;#039;$item&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/edit&amp;gt;&amp;lt;/h3&amp;gt;&amp;quot;;&lt;br /&gt;
  echo &amp;quot;&amp;lt;edit field=&amp;#039;body&amp;#039; page=&amp;#039;$item&amp;#039;&amp;gt;$item-&amp;gt;body&amp;lt;/edit&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Manchmal auch praktisch wenn man mit fields arbeitet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Body&lt;br /&gt;
if($page-&amp;gt;body){&lt;br /&gt;
  $bodyMarkup = &amp;quot;&amp;lt;edit field=\&amp;quot;body\&amp;quot; page=\&amp;quot;$page\&amp;quot;&amp;gt;$page-&amp;gt;body&amp;lt;/edit&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Editor funktioniert nicht immer===&lt;br /&gt;
Die Edit Tags werden aus dem Code entfernt aber man kann nicht doppelklicken.&lt;br /&gt;
&lt;br /&gt;
Prüfen ob du mit einer anderen Domain (z.B. ohne www.) angelmeldet bist. Der Editor funktioniert bei mir nur wenn man in der exakt selben Domain ist.&lt;br /&gt;
&lt;br /&gt;
== Kopierschnipsel ==&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;body&amp;quot; page=&amp;quot;&amp;#039;.$page.&amp;#039;&amp;quot;&amp;gt;&amp;#039;.$page-&amp;gt;body.&amp;#039;&amp;lt;/edit&amp;gt;&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;body&amp;quot; page=&amp;quot;&amp;#039;.$page.&amp;#039;&amp;quot;&amp;gt;&amp;#039;.$page-&amp;gt;body.&amp;#039;&amp;lt;/edit&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Front_Page_Editing&amp;diff=25417</id>
		<title>ProcessWire - Front Page Editing</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Front_Page_Editing&amp;diff=25417"/>
		<updated>2021-10-05T07:53:18Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: /* Editor funktioniert nicht */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Front End Page Editor == &lt;br /&gt;
https://processwire.com/docs/front-end/front-end-editing/&lt;br /&gt;
&lt;br /&gt;
Auch genannt: Frontend-Editing oder Frontpage Edit oder Frontend-Editor&lt;br /&gt;
&lt;br /&gt;
* Mehrere Optionen (im Backend auswählen)&lt;br /&gt;
* Option A -&amp;gt; Automatisch&lt;br /&gt;
** Kann verwendet werden wenn ein Feld nur einmal auf einer Seite verwendet wird.&lt;br /&gt;
* Option B -&amp;gt; API Method Call&lt;br /&gt;
** Geeignet für text fields, number fields, dates...&lt;br /&gt;
** Nicht geeignet für Files/Images, PageTables, Repeaters or andere Felder über die man iteriert&lt;br /&gt;
** Statt get einfach edit nehmen&lt;br /&gt;
 &amp;lt;?php echo $page-&amp;gt;edit(&amp;#039;body&amp;#039;); ?&amp;gt;&lt;br /&gt;
* Option C -&amp;gt; HTML Edit Tags&lt;br /&gt;
** Anhand &amp;#039;&amp;#039;&amp;lt;edit [feldname]&amp;gt;...&amp;lt;/edit&amp;gt;&amp;#039;&amp;#039;  findet PW die Felder&lt;br /&gt;
** Für Repeater geeignet&lt;br /&gt;
** Unterstüzt Inline Editor, wenn das Feld es unterstützt&lt;br /&gt;
&lt;br /&gt;
* Option D -&amp;gt; HTML Edit Attributes&lt;br /&gt;
** Gleiche Funktionalität wie Tags&lt;br /&gt;
** edit Attribut für div, span, ... statt eigenständiges Tag&lt;br /&gt;
** always uses the dialog editor and does not use the inline editor.&lt;br /&gt;
 &amp;lt;div edit=&amp;quot;events&amp;quot;&amp;gt;...&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
* PageFrontEdit Modul installieren (Core)&lt;br /&gt;
* Für Option A Checkboxen anhaken&lt;br /&gt;
* Für Option B-C Templates berarbeiten.&lt;br /&gt;
== Options in Detail ==&lt;br /&gt;
=== Option A ===&lt;br /&gt;
Einfach im Backend anhaken&lt;br /&gt;
&lt;br /&gt;
=== Option B ===&lt;br /&gt;
Statt&lt;br /&gt;
 $page-&amp;gt;get(&amp;#039;field_name&amp;#039;);&lt;br /&gt;
 $page-&amp;gt;edit(&amp;#039;field_name&amp;#039;);&lt;br /&gt;
Beispiel &lt;br /&gt;
 &amp;lt;?php echo $page-&amp;gt;edit(&amp;#039;body&amp;#039;); ?&amp;gt;&lt;br /&gt;
=== Option C ===&lt;br /&gt;
&lt;br /&gt;
Beispiel Image Feld &amp;#039;photo&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;edit photo&amp;gt;&lt;br /&gt;
  &amp;lt;img src=&amp;quot;&amp;lt;?=$page-&amp;gt;image-&amp;gt;url?&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/edit&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel Repeater, PageTable oder Table Field&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;edit events&amp;gt;&lt;br /&gt;
  &amp;lt;?php foreach($page-&amp;gt;events as $event): ?&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;event&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h3&amp;gt;&amp;lt;?=$event-&amp;gt;title?&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
      &amp;lt;p class=&amp;quot;date&amp;quot;&amp;gt;&amp;lt;?=$event-&amp;gt;date?&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;&amp;lt;?=$event-&amp;gt;summary?&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;?php endforeach; ?&amp;gt;&lt;br /&gt;
&amp;lt;/edit&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beschreibung von Ryan:&lt;br /&gt;
&lt;br /&gt;
By the way, you can also use some more verbose but alternate syntax for the &amp;lt;edit&amp;gt; tags if you prefer. If your editor does syntax highlighting with your HTML, it may be more consistent (the &amp;quot;quotes&amp;quot; are optional of course):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;events&amp;quot;&amp;gt; ... &amp;lt;/edit&amp;gt;&lt;br /&gt;
If your editable region contains multiple fields you want to be edited together, you can specify more than one:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;intro,image,events&amp;quot;&amp;gt; ... &amp;lt;/edit&amp;gt;&lt;br /&gt;
If your field happens to be on some other page other than the one being rendered, you can also specify what page you want to be edited:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;events&amp;quot; page=&amp;quot;1001&amp;quot;&amp;gt; ... &amp;lt;/edit&amp;gt;&lt;br /&gt;
The 1001 can be any page ID or path. The above can also be shortened to this if you prefer:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;1001.events&amp;quot;&amp;gt; ... &amp;lt;/edit&amp;gt;&lt;br /&gt;
Or this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;edit 1001.events&amp;gt; ... &amp;lt;/edit&amp;gt;&lt;br /&gt;
If you are using &amp;lt;edit&amp;gt; tags with a field that supports inline editing (like a text or CKEditor field), the inline editor will be used. Otherwise it will open a dialog to the editor.&lt;br /&gt;
&lt;br /&gt;
=== Option D ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div edit=&amp;quot;events&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- code to output events --&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Or to specify a field from some other page (1001):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div edit=&amp;quot;1001.events&amp;quot;&amp;gt; ... &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Or to specify multiple fields:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div edit=&amp;quot;intro,image,events&amp;quot;&amp;gt; ... &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;quot;edit&amp;quot; attributes are stripped from the markup that gets output, so the only place you will see them is where you place them in your template file(s).&lt;br /&gt;
&lt;br /&gt;
Worth noting about &amp;#039;&amp;#039;&amp;#039;option D&amp;#039;&amp;#039;&amp;#039; is that it &amp;#039;&amp;#039;&amp;#039;always uses the dialog editor&amp;#039;&amp;#039;&amp;#039; and does not use the inline editor.&lt;br /&gt;
&lt;br /&gt;
== Probleme lösen ==&lt;br /&gt;
=== Front Page Editing in Repeatern ===&lt;br /&gt;
Der Editor zeigt keinen Inhalt. Bei Superadmins funktioniert es aber.&lt;br /&gt;
 https://processwire.com/talk/topic/15357-solved-frontend-edit-on-repeater-fields/&lt;br /&gt;
 https://github.com/processwire/processwire-issues/issues/183&lt;br /&gt;
Lösung: Mit Option C funktioniert es, wenn man noch das page-Attribut mit reinnimmt. Im page Attribut gibt man den Repeater an.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach($page-&amp;gt;repeater_field as $item) {&lt;br /&gt;
  echo &amp;quot;&amp;lt;h3&amp;gt;&amp;lt;edit field=&amp;#039;title&amp;#039; page=&amp;#039;$item&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/edit&amp;gt;&amp;lt;/h3&amp;gt;&amp;quot;;&lt;br /&gt;
  echo &amp;quot;&amp;lt;edit field=&amp;#039;body&amp;#039; page=&amp;#039;$item&amp;#039;&amp;gt;$item-&amp;gt;body&amp;lt;/edit&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Manchmal auch praktisch wenn man mit fields arbeitet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Body&lt;br /&gt;
if($page-&amp;gt;body){&lt;br /&gt;
  $bodyMarkup = &amp;quot;&amp;lt;edit field=\&amp;quot;body\&amp;quot; page=\&amp;quot;$page\&amp;quot;&amp;gt;$page-&amp;gt;body&amp;lt;/edit&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Editor funktioniert nicht (delayed content)===&lt;br /&gt;
Die Edit Tags werden aus dem Code entfernt aber man kann nicht doppelklicken.&lt;br /&gt;
&lt;br /&gt;
Ich hatte Probleme sobald der Inhalt über &lt;br /&gt;
 ob_start() &lt;br /&gt;
gepuffert und danach der Puffer in $content geschrieben wurde.&lt;br /&gt;
Wenn man den Inhalt direkt in $content schreibt funktioniert es.&lt;br /&gt;
&lt;br /&gt;
== Kopierschnipsel ==&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;body&amp;quot; page=&amp;quot;&amp;#039;.$page.&amp;#039;&amp;quot;&amp;gt;&amp;#039;.$page-&amp;gt;body.&amp;#039;&amp;lt;/edit&amp;gt;&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;body&amp;quot; page=&amp;quot;&amp;#039;.$page.&amp;#039;&amp;quot;&amp;gt;&amp;#039;.$page-&amp;gt;body.&amp;#039;&amp;lt;/edit&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Front_Page_Editing&amp;diff=25416</id>
		<title>ProcessWire - Front Page Editing</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Front_Page_Editing&amp;diff=25416"/>
		<updated>2021-10-05T07:18:21Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: /* Probleme lösen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Front End Page Editor == &lt;br /&gt;
https://processwire.com/docs/front-end/front-end-editing/&lt;br /&gt;
&lt;br /&gt;
Auch genannt: Frontend-Editing oder Frontpage Edit oder Frontend-Editor&lt;br /&gt;
&lt;br /&gt;
* Mehrere Optionen (im Backend auswählen)&lt;br /&gt;
* Option A -&amp;gt; Automatisch&lt;br /&gt;
** Kann verwendet werden wenn ein Feld nur einmal auf einer Seite verwendet wird.&lt;br /&gt;
* Option B -&amp;gt; API Method Call&lt;br /&gt;
** Geeignet für text fields, number fields, dates...&lt;br /&gt;
** Nicht geeignet für Files/Images, PageTables, Repeaters or andere Felder über die man iteriert&lt;br /&gt;
** Statt get einfach edit nehmen&lt;br /&gt;
 &amp;lt;?php echo $page-&amp;gt;edit(&amp;#039;body&amp;#039;); ?&amp;gt;&lt;br /&gt;
* Option C -&amp;gt; HTML Edit Tags&lt;br /&gt;
** Anhand &amp;#039;&amp;#039;&amp;lt;edit [feldname]&amp;gt;...&amp;lt;/edit&amp;gt;&amp;#039;&amp;#039;  findet PW die Felder&lt;br /&gt;
** Für Repeater geeignet&lt;br /&gt;
** Unterstüzt Inline Editor, wenn das Feld es unterstützt&lt;br /&gt;
&lt;br /&gt;
* Option D -&amp;gt; HTML Edit Attributes&lt;br /&gt;
** Gleiche Funktionalität wie Tags&lt;br /&gt;
** edit Attribut für div, span, ... statt eigenständiges Tag&lt;br /&gt;
** always uses the dialog editor and does not use the inline editor.&lt;br /&gt;
 &amp;lt;div edit=&amp;quot;events&amp;quot;&amp;gt;...&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
* PageFrontEdit Modul installieren (Core)&lt;br /&gt;
* Für Option A Checkboxen anhaken&lt;br /&gt;
* Für Option B-C Templates berarbeiten.&lt;br /&gt;
== Options in Detail ==&lt;br /&gt;
=== Option A ===&lt;br /&gt;
Einfach im Backend anhaken&lt;br /&gt;
&lt;br /&gt;
=== Option B ===&lt;br /&gt;
Statt&lt;br /&gt;
 $page-&amp;gt;get(&amp;#039;field_name&amp;#039;);&lt;br /&gt;
 $page-&amp;gt;edit(&amp;#039;field_name&amp;#039;);&lt;br /&gt;
Beispiel &lt;br /&gt;
 &amp;lt;?php echo $page-&amp;gt;edit(&amp;#039;body&amp;#039;); ?&amp;gt;&lt;br /&gt;
=== Option C ===&lt;br /&gt;
&lt;br /&gt;
Beispiel Image Feld &amp;#039;photo&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;edit photo&amp;gt;&lt;br /&gt;
  &amp;lt;img src=&amp;quot;&amp;lt;?=$page-&amp;gt;image-&amp;gt;url?&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/edit&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel Repeater, PageTable oder Table Field&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;edit events&amp;gt;&lt;br /&gt;
  &amp;lt;?php foreach($page-&amp;gt;events as $event): ?&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;event&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h3&amp;gt;&amp;lt;?=$event-&amp;gt;title?&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
      &amp;lt;p class=&amp;quot;date&amp;quot;&amp;gt;&amp;lt;?=$event-&amp;gt;date?&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;&amp;lt;?=$event-&amp;gt;summary?&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;?php endforeach; ?&amp;gt;&lt;br /&gt;
&amp;lt;/edit&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beschreibung von Ryan:&lt;br /&gt;
&lt;br /&gt;
By the way, you can also use some more verbose but alternate syntax for the &amp;lt;edit&amp;gt; tags if you prefer. If your editor does syntax highlighting with your HTML, it may be more consistent (the &amp;quot;quotes&amp;quot; are optional of course):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;events&amp;quot;&amp;gt; ... &amp;lt;/edit&amp;gt;&lt;br /&gt;
If your editable region contains multiple fields you want to be edited together, you can specify more than one:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;intro,image,events&amp;quot;&amp;gt; ... &amp;lt;/edit&amp;gt;&lt;br /&gt;
If your field happens to be on some other page other than the one being rendered, you can also specify what page you want to be edited:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;events&amp;quot; page=&amp;quot;1001&amp;quot;&amp;gt; ... &amp;lt;/edit&amp;gt;&lt;br /&gt;
The 1001 can be any page ID or path. The above can also be shortened to this if you prefer:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;1001.events&amp;quot;&amp;gt; ... &amp;lt;/edit&amp;gt;&lt;br /&gt;
Or this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;edit 1001.events&amp;gt; ... &amp;lt;/edit&amp;gt;&lt;br /&gt;
If you are using &amp;lt;edit&amp;gt; tags with a field that supports inline editing (like a text or CKEditor field), the inline editor will be used. Otherwise it will open a dialog to the editor.&lt;br /&gt;
&lt;br /&gt;
=== Option D ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div edit=&amp;quot;events&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- code to output events --&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Or to specify a field from some other page (1001):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div edit=&amp;quot;1001.events&amp;quot;&amp;gt; ... &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Or to specify multiple fields:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div edit=&amp;quot;intro,image,events&amp;quot;&amp;gt; ... &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;quot;edit&amp;quot; attributes are stripped from the markup that gets output, so the only place you will see them is where you place them in your template file(s).&lt;br /&gt;
&lt;br /&gt;
Worth noting about &amp;#039;&amp;#039;&amp;#039;option D&amp;#039;&amp;#039;&amp;#039; is that it &amp;#039;&amp;#039;&amp;#039;always uses the dialog editor&amp;#039;&amp;#039;&amp;#039; and does not use the inline editor.&lt;br /&gt;
&lt;br /&gt;
== Probleme lösen ==&lt;br /&gt;
=== Front Page Editing in Repeatern ===&lt;br /&gt;
Der Editor zeigt keinen Inhalt. Bei Superadmins funktioniert es aber.&lt;br /&gt;
 https://processwire.com/talk/topic/15357-solved-frontend-edit-on-repeater-fields/&lt;br /&gt;
 https://github.com/processwire/processwire-issues/issues/183&lt;br /&gt;
Lösung: Mit Option C funktioniert es, wenn man noch das page-Attribut mit reinnimmt. Im page Attribut gibt man den Repeater an.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach($page-&amp;gt;repeater_field as $item) {&lt;br /&gt;
  echo &amp;quot;&amp;lt;h3&amp;gt;&amp;lt;edit field=&amp;#039;title&amp;#039; page=&amp;#039;$item&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/edit&amp;gt;&amp;lt;/h3&amp;gt;&amp;quot;;&lt;br /&gt;
  echo &amp;quot;&amp;lt;edit field=&amp;#039;body&amp;#039; page=&amp;#039;$item&amp;#039;&amp;gt;$item-&amp;gt;body&amp;lt;/edit&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Manchmal auch praktisch wenn man mit fields arbeitet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Body&lt;br /&gt;
if($page-&amp;gt;body){&lt;br /&gt;
  $bodyMarkup = &amp;quot;&amp;lt;edit field=\&amp;quot;body\&amp;quot; page=\&amp;quot;$page\&amp;quot;&amp;gt;$page-&amp;gt;body&amp;lt;/edit&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Editor funktioniert nicht ===&lt;br /&gt;
== Kopierschnipsel ==&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;body&amp;quot; page=&amp;quot;&amp;#039;.$page.&amp;#039;&amp;quot;&amp;gt;&amp;#039;.$page-&amp;gt;body.&amp;#039;&amp;lt;/edit&amp;gt;&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;body&amp;quot; page=&amp;quot;&amp;#039;.$page.&amp;#039;&amp;quot;&amp;gt;&amp;#039;.$page-&amp;gt;body.&amp;#039;&amp;lt;/edit&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Front_Page_Editing&amp;diff=25415</id>
		<title>ProcessWire - Front Page Editing</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Front_Page_Editing&amp;diff=25415"/>
		<updated>2021-10-05T07:17:13Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: /* Front Page Editing in Repeatern */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Front End Page Editor == &lt;br /&gt;
https://processwire.com/docs/front-end/front-end-editing/&lt;br /&gt;
&lt;br /&gt;
Auch genannt: Frontend-Editing oder Frontpage Edit oder Frontend-Editor&lt;br /&gt;
&lt;br /&gt;
* Mehrere Optionen (im Backend auswählen)&lt;br /&gt;
* Option A -&amp;gt; Automatisch&lt;br /&gt;
** Kann verwendet werden wenn ein Feld nur einmal auf einer Seite verwendet wird.&lt;br /&gt;
* Option B -&amp;gt; API Method Call&lt;br /&gt;
** Geeignet für text fields, number fields, dates...&lt;br /&gt;
** Nicht geeignet für Files/Images, PageTables, Repeaters or andere Felder über die man iteriert&lt;br /&gt;
** Statt get einfach edit nehmen&lt;br /&gt;
 &amp;lt;?php echo $page-&amp;gt;edit(&amp;#039;body&amp;#039;); ?&amp;gt;&lt;br /&gt;
* Option C -&amp;gt; HTML Edit Tags&lt;br /&gt;
** Anhand &amp;#039;&amp;#039;&amp;lt;edit [feldname]&amp;gt;...&amp;lt;/edit&amp;gt;&amp;#039;&amp;#039;  findet PW die Felder&lt;br /&gt;
** Für Repeater geeignet&lt;br /&gt;
** Unterstüzt Inline Editor, wenn das Feld es unterstützt&lt;br /&gt;
&lt;br /&gt;
* Option D -&amp;gt; HTML Edit Attributes&lt;br /&gt;
** Gleiche Funktionalität wie Tags&lt;br /&gt;
** edit Attribut für div, span, ... statt eigenständiges Tag&lt;br /&gt;
** always uses the dialog editor and does not use the inline editor.&lt;br /&gt;
 &amp;lt;div edit=&amp;quot;events&amp;quot;&amp;gt;...&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
* PageFrontEdit Modul installieren (Core)&lt;br /&gt;
* Für Option A Checkboxen anhaken&lt;br /&gt;
* Für Option B-C Templates berarbeiten.&lt;br /&gt;
== Options in Detail ==&lt;br /&gt;
=== Option A ===&lt;br /&gt;
Einfach im Backend anhaken&lt;br /&gt;
&lt;br /&gt;
=== Option B ===&lt;br /&gt;
Statt&lt;br /&gt;
 $page-&amp;gt;get(&amp;#039;field_name&amp;#039;);&lt;br /&gt;
 $page-&amp;gt;edit(&amp;#039;field_name&amp;#039;);&lt;br /&gt;
Beispiel &lt;br /&gt;
 &amp;lt;?php echo $page-&amp;gt;edit(&amp;#039;body&amp;#039;); ?&amp;gt;&lt;br /&gt;
=== Option C ===&lt;br /&gt;
&lt;br /&gt;
Beispiel Image Feld &amp;#039;photo&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;edit photo&amp;gt;&lt;br /&gt;
  &amp;lt;img src=&amp;quot;&amp;lt;?=$page-&amp;gt;image-&amp;gt;url?&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/edit&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel Repeater, PageTable oder Table Field&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;edit events&amp;gt;&lt;br /&gt;
  &amp;lt;?php foreach($page-&amp;gt;events as $event): ?&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;event&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h3&amp;gt;&amp;lt;?=$event-&amp;gt;title?&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
      &amp;lt;p class=&amp;quot;date&amp;quot;&amp;gt;&amp;lt;?=$event-&amp;gt;date?&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;&amp;lt;?=$event-&amp;gt;summary?&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;?php endforeach; ?&amp;gt;&lt;br /&gt;
&amp;lt;/edit&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beschreibung von Ryan:&lt;br /&gt;
&lt;br /&gt;
By the way, you can also use some more verbose but alternate syntax for the &amp;lt;edit&amp;gt; tags if you prefer. If your editor does syntax highlighting with your HTML, it may be more consistent (the &amp;quot;quotes&amp;quot; are optional of course):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;events&amp;quot;&amp;gt; ... &amp;lt;/edit&amp;gt;&lt;br /&gt;
If your editable region contains multiple fields you want to be edited together, you can specify more than one:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;intro,image,events&amp;quot;&amp;gt; ... &amp;lt;/edit&amp;gt;&lt;br /&gt;
If your field happens to be on some other page other than the one being rendered, you can also specify what page you want to be edited:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;events&amp;quot; page=&amp;quot;1001&amp;quot;&amp;gt; ... &amp;lt;/edit&amp;gt;&lt;br /&gt;
The 1001 can be any page ID or path. The above can also be shortened to this if you prefer:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;1001.events&amp;quot;&amp;gt; ... &amp;lt;/edit&amp;gt;&lt;br /&gt;
Or this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;edit 1001.events&amp;gt; ... &amp;lt;/edit&amp;gt;&lt;br /&gt;
If you are using &amp;lt;edit&amp;gt; tags with a field that supports inline editing (like a text or CKEditor field), the inline editor will be used. Otherwise it will open a dialog to the editor.&lt;br /&gt;
&lt;br /&gt;
=== Option D ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div edit=&amp;quot;events&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- code to output events --&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Or to specify a field from some other page (1001):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div edit=&amp;quot;1001.events&amp;quot;&amp;gt; ... &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Or to specify multiple fields:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div edit=&amp;quot;intro,image,events&amp;quot;&amp;gt; ... &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;quot;edit&amp;quot; attributes are stripped from the markup that gets output, so the only place you will see them is where you place them in your template file(s).&lt;br /&gt;
&lt;br /&gt;
Worth noting about &amp;#039;&amp;#039;&amp;#039;option D&amp;#039;&amp;#039;&amp;#039; is that it &amp;#039;&amp;#039;&amp;#039;always uses the dialog editor&amp;#039;&amp;#039;&amp;#039; and does not use the inline editor.&lt;br /&gt;
&lt;br /&gt;
== Probleme lösen ==&lt;br /&gt;
=== Front Page Editing in Repeatern ===&lt;br /&gt;
Der Editor zeigt keinen Inhalt. Bei Superadmins funktioniert es aber.&lt;br /&gt;
 https://processwire.com/talk/topic/15357-solved-frontend-edit-on-repeater-fields/&lt;br /&gt;
 https://github.com/processwire/processwire-issues/issues/183&lt;br /&gt;
Lösung: Mit Option C funktioniert es, wenn man noch das page-Attribut mit reinnimmt. Im page Attribut gibt man den Repeater an.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach($page-&amp;gt;repeater_field as $item) {&lt;br /&gt;
  echo &amp;quot;&amp;lt;h3&amp;gt;&amp;lt;edit field=&amp;#039;title&amp;#039; page=&amp;#039;$item&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/edit&amp;gt;&amp;lt;/h3&amp;gt;&amp;quot;;&lt;br /&gt;
  echo &amp;quot;&amp;lt;edit field=&amp;#039;body&amp;#039; page=&amp;#039;$item&amp;#039;&amp;gt;$item-&amp;gt;body&amp;lt;/edit&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Manchmal auch praktisch wenn man mit fields arbeitet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Body&lt;br /&gt;
if($page-&amp;gt;body){&lt;br /&gt;
  $bodyMarkup = &amp;quot;&amp;lt;edit field=\&amp;quot;body\&amp;quot; page=\&amp;quot;$page\&amp;quot;&amp;gt;$page-&amp;gt;body&amp;lt;/edit&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Kopierschnipsel&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;body&amp;quot; page=&amp;quot;&amp;#039;.$page.&amp;#039;&amp;quot;&amp;gt;&amp;#039;.$page-&amp;gt;body.&amp;#039;&amp;lt;/edit&amp;gt;&lt;br /&gt;
 &amp;lt;edit field=&amp;quot;body&amp;quot; page=&amp;quot;&amp;#039;.$page.&amp;#039;&amp;quot;&amp;gt;&amp;#039;.$page-&amp;gt;body.&amp;#039;&amp;lt;/edit&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Module_schreiben&amp;diff=25414</id>
		<title>ProcessWire - Module schreiben</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Module_schreiben&amp;diff=25414"/>
		<updated>2021-09-22T16:44:18Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wichtigste Resourcen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 https://processwire.com/docs/modules/development/ - Guter Ausgangspunkt&lt;br /&gt;
 https://processwire.com/api/ref/module/ - Module API&lt;br /&gt;
 https://processwire.com/docs/modules/types/ - Welche Modultypen gibt es ?&lt;br /&gt;
 https://processwire.com/talk/topic/778-module-dependencies/ - Module die andere Module benötigen&lt;br /&gt;
 https://processwire.com/talk/forum/19-moduleplugin-development/ - Forum zum Thema Module entwickeln&lt;br /&gt;
 http://somatonic.github.io/Captain-Hook/ - Hook Cheatsheet&lt;br /&gt;
 https://processwire.com/blog/posts/new-module-configuration-options/ - Neuere Konfigurationsmöglichkeiten&lt;br /&gt;
 https://processwire.com/docs/start/api-access/ Zugriff auf ProcessWire API Variablen (wire Objekt)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Tutorials und Beispiele zum Einstieg &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 https://processwire.com/docs/modules/ - Introduction, Development, Hooks, Types, Pro Modules, Third Party&lt;br /&gt;
 https://github.com/ryancramerdesign/ProcessHello - Modul Skelett Beispiel für eigene Backend (Process) Module&lt;br /&gt;
 https://github.com/ryancramerdesign/FieldtypeMapMarker - Beispiel für ein Fieldtype und Inputfield Modul&lt;br /&gt;
 https://processwire.com/blog/posts/building-custom-admin-pages-with-process-modules/ - super Tutorial zu Admin Modulen&lt;br /&gt;
 https://webdesign.tutsplus.com/tutorials/a-beginners-introduction-to-writing-modules-in-processwire--cms-26862&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wikiseiten&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 [[ProcessWire - Module Snippets]]&lt;br /&gt;
 [[ProcessWire - Fieldtype erstellen (Module)]]&lt;br /&gt;
 [[Process Module (ProcessWire)]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Weitere Links&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 http://modules.pw/ (Module Creator)&lt;br /&gt;
&lt;br /&gt;
== Wo - Was ? ==&lt;br /&gt;
=== Welche Typen von Modulen gibt es ? ===&lt;br /&gt;
 https://processwire.com/docs/modules/types/&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Fieldtype&amp;#039;&amp;#039;&amp;#039;: Repräsentiert einen Datentyp. Meistens keine Public API, Handelt Daten / Datenbank - [[ProcessWire - Fieldtype erstellen (Module)]]&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Inputfield&amp;#039;&amp;#039;&amp;#039;: Sammelt User Eingaben über ein Formular im Admin Bereich. Im Gegensatz zum Fieldtype geht es hier um das UI im Backend. Das Handling der Daten liegt beim Fieldtype.&lt;br /&gt;
* [[Process Module (ProcessWire)|&amp;#039;&amp;#039;&amp;#039;Process&amp;#039;&amp;#039;&amp;#039; for creating admin processes/applications.]]&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Textformatter&amp;#039;&amp;#039;&amp;#039; for formatting text.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;AdminTheme&amp;#039;&amp;#039;&amp;#039; for creating themes in the admin.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;WireMail&amp;#039;&amp;#039;&amp;#039; for modules that send email and extend the WireMail class.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Tfa&amp;#039;&amp;#039;&amp;#039; for implementing a specific kind of two-factor authentication.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ImageSizerEngine&amp;#039;&amp;#039;&amp;#039; for modules that extend ImageSizerEngine for resizing images.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;FileCompiler&amp;#039;&amp;#039;&amp;#039; for modules that extend FileCompilerModule for compilation of files.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;FileValidator&amp;#039;&amp;#039;&amp;#039; for modules that extend FileValidatorModule for validation of files.&lt;br /&gt;
&lt;br /&gt;
=== Wie werden Felder in der Datenbank angelegt ? ===&lt;br /&gt;
Felder die in der Datenbank speichern sind vom Typ &amp;quot;Fieldtype&amp;quot;, meistens in Kombination mit einem Inputfield das dann die Frontendausgabe übernimmt. &lt;br /&gt;
Module können auch für ihre eigene Konfiguration Daten in der Datenbank speichern. Das geht z.B. über eine ModulnameConfig Datei (s.u.).&lt;br /&gt;
&lt;br /&gt;
=== Namenskonventionen ===&lt;br /&gt;
Ein Modulname sollte mit dem Typ den das Modul hat beginnen. Also etwa ProcessMeinAdminModul oder FieldtypeTable. ProcessWire listet das Modul dann in der Entsprechenden Kategorie auf. Wenn man etwas anderes nimmt z.B. LoginRegister dann kommt das Modul unter der neuen Rubrik &amp;quot;Login&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Konfigurierbare Module ===&lt;br /&gt;
Das geht seit 2.5.5 mittlerweile sehr einfach mit den neuen configuration-options.&lt;br /&gt;
 https://processwire.com/blog/posts/new-module-configuration-options/&lt;br /&gt;
 [[ProcessWire - Konfigurierbare Module]]&lt;br /&gt;
&lt;br /&gt;
== Spezielle Funktionen in Modulen ==&lt;br /&gt;
&lt;br /&gt;
=== Modulinformation ===&lt;br /&gt;
Das Modul stellt Infos zur Verfügung und nutzt dafür eine von 3 Methoden:&lt;br /&gt;
    getModuleInfo() static method in your module class that returns an array.&lt;br /&gt;
    YourModuleClass.info.php file that populates an $info array.&lt;br /&gt;
    YourModuleClass.info.json file that contains an info object.&lt;br /&gt;
&lt;br /&gt;
Hier werden title, version, summary und weitere Daten hinterlegt. Hier kann man auch angeben ob ein Modul ein Autoload Modul ist.&lt;br /&gt;
&lt;br /&gt;
 https://processwire.com/api/ref/module/&lt;br /&gt;
&lt;br /&gt;
=== init ===&lt;br /&gt;
 public function init(){}&lt;br /&gt;
Initialisiert das Modul. ProcessWire ruft diese Funktion auf, wenn das Modul geladen ist. Bei Autoload Modulen wird es aufgerufen wenn die ProcessWire API bereit ist. Daher ist es ein guter Ort um Hooks einzubinden.&lt;br /&gt;
&lt;br /&gt;
=== ready ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
  public function ready() {&lt;br /&gt;
    if($this-&amp;gt;page-&amp;gt;template == &amp;#039;admin&amp;#039;) {&lt;br /&gt;
      $this-&amp;gt;message($this-&amp;gt;hi());&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird in autoload Modulen aufgerufen wenn die API bereit ist. Nützlich für Hooks:&lt;br /&gt;
&lt;br /&gt;
=== execute ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * This function is executed when a page with your Process assigned is accessed. &lt;br /&gt;
 	 *&lt;br /&gt;
	 * This can be seen as your main or index function. You&amp;#039;ll probably want to replace&lt;br /&gt;
	 * everything in this function. &lt;br /&gt;
	 *&lt;br /&gt;
	 */&lt;br /&gt;
	public function ___execute() {&lt;br /&gt;
		// greetingType and greeting are automatically populated to this module&lt;br /&gt;
		// and they were defined in ProcessHello.config.php&lt;br /&gt;
		if($this-&amp;gt;greetingType == &amp;#039;message&amp;#039;) {&lt;br /&gt;
			$this-&amp;gt;message($this-&amp;gt;greeting); &lt;br /&gt;
		} else if($this-&amp;gt;greetingType == &amp;#039;warning&amp;#039;) {&lt;br /&gt;
			$this-&amp;gt;warning($this-&amp;gt;greeting); &lt;br /&gt;
		} else {&lt;br /&gt;
			$this-&amp;gt;error($this-&amp;gt;greeting); &lt;br /&gt;
		}&lt;br /&gt;
		// generate some navigation&lt;br /&gt;
		$out = 	&amp;quot;&lt;br /&gt;
			&amp;lt;h2&amp;gt;$this-&amp;gt;greeting&amp;lt;/h2&amp;gt;&lt;br /&gt;
			&amp;lt;dl class=&amp;#039;nav&amp;#039;&amp;gt;&lt;br /&gt;
				&amp;lt;dt&amp;gt;&amp;lt;a href=&amp;#039;./something/&amp;#039;&amp;gt;Do Something&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;&lt;br /&gt;
				&amp;lt;dd&amp;gt;Runs the executeSomething() function.&amp;lt;/dd&amp;gt;&lt;br /&gt;
			&amp;lt;/dl&amp;gt;&lt;br /&gt;
			&amp;quot;;&lt;br /&gt;
		return $out;&lt;br /&gt;
	}	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== executeSomething ===&lt;br /&gt;
Ruft man eine Unterseite des Moduls auf kann man eine eigene execute Funktion nutzen&lt;br /&gt;
___executeSlug wobei Slug für den Url Slug steht. Heißt der slug /field/ dann wird executeField() aufgerufen, falls diese Funktion existiert.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Called when the URL is this module&amp;#039;s page URL + &amp;quot;/something/&amp;quot;&lt;br /&gt;
	 *&lt;br /&gt;
	 */&lt;br /&gt;
	public function ___executeSomething() {&lt;br /&gt;
		// set a new headline, replacing the one used by our page&lt;br /&gt;
		// this is optional as PW will auto-generate a headline &lt;br /&gt;
		$this-&amp;gt;headline(&amp;#039;This is something!&amp;#039;); &lt;br /&gt;
		// add a breadcrumb that returns to our main page &lt;br /&gt;
		// this is optional as PW will auto-generate breadcrumbs&lt;br /&gt;
		$this-&amp;gt;breadcrumb(&amp;#039;../&amp;#039;, &amp;#039;Hello&amp;#039;); &lt;br /&gt;
		$out = 	&amp;quot;&lt;br /&gt;
			&amp;lt;h2&amp;gt;Not much to to see here&amp;lt;/h2&amp;gt;&lt;br /&gt;
			&amp;lt;p&amp;gt;&amp;lt;a href=&amp;#039;../&amp;#039;&amp;gt;Go Back&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
			&amp;quot;;&lt;br /&gt;
		return $out; &lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* executeMySecondPage translates to my-second-page in the URL&lt;br /&gt;
* executeMysecondpage translates to mysecondpage in the URL&lt;br /&gt;
&lt;br /&gt;
=== install &amp;amp; uninstall ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
	 * Called only when your module is installed&lt;br /&gt;
	 *&lt;br /&gt;
	 * If you don&amp;#039;t need anything here, you can simply remove this method. &lt;br /&gt;
	 *&lt;br /&gt;
	 */&lt;br /&gt;
	public function ___install() {&lt;br /&gt;
		parent::___install(); // always remember to call parent method&lt;br /&gt;
	}&lt;br /&gt;
	/**&lt;br /&gt;
	 * Called only when your module is uninstalled&lt;br /&gt;
	 *&lt;br /&gt;
	 * This should return the site to the same state it was in before the module was installed. &lt;br /&gt;
	 *&lt;br /&gt;
	 * If you don&amp;#039;t need anything here, you can simply remove this method. &lt;br /&gt;
	 *&lt;br /&gt;
	 */&lt;br /&gt;
	public function ___uninstall() {&lt;br /&gt;
		parent::___uninstall(); // always remember to call parent method&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vererbung und Eigenschaften in Modulen ==&lt;br /&gt;
Modules are not different from PHP classes.&lt;br /&gt;
&lt;br /&gt;
To change the properties of MyModule class from within MyOtherModule class, you can either:&lt;br /&gt;
&lt;br /&gt;
#Make MyOtherModule class extend MyModule. It will thus inherit MyModule&amp;#039;s public and protected properties and methods&lt;br /&gt;
#Make the properties firstName and lastName configurable by passing them as parameters/arguments in MyModule&amp;#039;s constructor method.&lt;br /&gt;
&lt;br /&gt;
== Autoload Module und Hooks ==&lt;br /&gt;
Autoload werden automatisch geladen müssen also nicht in einem Template o.ä. gestartet werden. Daher bieten sie sich an um die Funktionalität von ProcessWire zu erweitern. Als Werkzeug dafür dienen Hooks. Mit Hooks kann man an vielen Stellen den Rendering Process der Seiten beeinflussen. Außerdem kann man für eigene Module ebenfalls Hooks bereitstellen. &lt;br /&gt;
&lt;br /&gt;
=== Hooks ===&lt;br /&gt;
 https://processwire.com/docs/modules/hooks/&lt;br /&gt;
Hooks sind ein mächtiges Werkzeug. Sie geben einem die Möglichkeit an vielen Stellen &amp;quot;einzuhaken&amp;quot; und Funktionalität einzubauen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function ready() {&lt;br /&gt;
  $this-&amp;gt;addHookAfter(&amp;#039;Page::render&amp;#039;, function($event) {&lt;br /&gt;
    $event-&amp;gt;return .= &amp;#039;&amp;lt;p&amp;gt;Hallo&amp;lt;/p&amp;gt;&amp;#039;;&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Schreibt am Ende Jeder Seite ein &amp;quot;Hallo&amp;quot;. Das $event Objekt ist ein [https://processwire.com/api/ref/hook-event/ HookEvent]. Im Beispiel fügen wir einfach etwas Markup hinzu. Über $event-&amp;gt;arguments() kann man aber auf ale Argumente zugreifen.&lt;br /&gt;
&lt;br /&gt;
Das gleiche aber nicht mit anonymer Funktion:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function ready() {&lt;br /&gt;
  // add hook after Page::render() and make it call the &amp;quot;test&amp;quot; method of $this module&lt;br /&gt;
  $this-&amp;gt;addHookAfter(&amp;#039;Page::render&amp;#039;, $this, &amp;#039;test&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public function test($event) {&lt;br /&gt;
  // modify the return value of Page::render() to include the following:&lt;br /&gt;
  $event-&amp;gt;return .= &amp;#039;&amp;lt;p&amp;gt;Hallo&amp;lt;/p&amp;gt;&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hooks zum erweitern von existierenden Klassen nutzen ===&lt;br /&gt;
Mit Hooks kann man in vorhandene Klassen einhaken. Z.B. läßt sich das Page Objekt erweitern.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function ready() {&lt;br /&gt;
  $this-&amp;gt;addHook(&amp;#039;Page::summarize&amp;#039;, $this, &amp;#039;summarize&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
public function summarize($event) {&lt;br /&gt;
  $page = $event-&amp;gt;object; // the $event-&amp;gt;object represents the object hooked (Page)&lt;br /&gt;
  $maxlen = $event-&amp;gt;arguments(0); // first argument is the optional max length&lt;br /&gt;
  if(!$maxlen) $maxlen = 200; // if no $maxlen was present, we&amp;#039;ll use a default of 200&lt;br /&gt;
  $summary = $this-&amp;gt;sanitizer-&amp;gt;truncate($page-&amp;gt;body, $maxlen); // use sanitizer truncate method to create a summary&lt;br /&gt;
  $event-&amp;gt;return = $summary; // populate $summary to $event-&amp;gt;return, the return value&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
So kann man ganz einfach eine Zusammenfassung aller Kindseiten in einem Template rendern:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach($page-&amp;gt;children as $item) {&lt;br /&gt;
  $summary = $item-&amp;gt;summarize(150);&lt;br /&gt;
  echo &amp;quot;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;#039;$item-&amp;gt;url&amp;#039;&amp;gt;$item-&amp;gt;title&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;$summary&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Autoload Module nur im Admin Bereich laden ===&lt;br /&gt;
&lt;br /&gt;
 &amp;#039;autoload&amp;#039; =&amp;gt; &amp;#039;template=admin&amp;#039; &lt;br /&gt;
statt&lt;br /&gt;
 &amp;#039;autoload&amp;#039; =&amp;gt; true&lt;br /&gt;
&lt;br /&gt;
=== Hook Beispiele ===&lt;br /&gt;
Hook am Ende des Renderings&lt;br /&gt;
 $this-&amp;gt;addHookAfter(&amp;#039;Page::render&amp;#039;, function($event) {...});&lt;br /&gt;
Füge eine Funktion &amp;quot;summarize&amp;quot; zum Page Objekt hinzu.&lt;br /&gt;
 $this-&amp;gt;addHook(&amp;#039;Page::summarize&amp;#039;, $this, &amp;#039;summarize&amp;#039;);&lt;br /&gt;
Hook auf eine einzelne Instanz (hier pages Objekt)&lt;br /&gt;
 $this-&amp;gt;pages-&amp;gt;addHookAfter(&amp;#039;saved&amp;#039;, function($event){...});&lt;br /&gt;
 $this-&amp;gt;addHook(&amp;#039;Page::method&amp;#039;, ...) // Spricht ALLE Instanzen an - Regelfall&lt;br /&gt;
 $page-&amp;gt;addHook(&amp;#039;method&amp;#039;, ...) // Spricht nur die EINE Instanz der Seite an.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Module Dependencies - voneinander abhängige Module ==&lt;br /&gt;
&lt;br /&gt;
 https://processwire.com/talk/topic/778-module-dependencies/&lt;br /&gt;
Wenn ein Modul nicht ohne ein anderes funktioniert spricht man von Module Dependency. In solchen Fällen kann man in der Modul Info angeben In vielen Fällen besteht ein Modul unter der Haube aus mehreren Einzelmodulen.&lt;br /&gt;
&lt;br /&gt;
Um ProcessWire mitzuteilen dass ein Modul benötigt wird gibt man es in der Moduldefinition an:&lt;br /&gt;
 &amp;#039;requires&amp;#039; =&amp;gt; &amp;quot;LazyCron&amp;quot;  // added this line&lt;br /&gt;
oder auch mehrere als Array&lt;br /&gt;
 &amp;#039;requires&amp;#039; =&amp;gt; array(&amp;quot;LazyCron&amp;quot;, &amp;quot;AdminBar&amp;quot;)  // added this line&lt;br /&gt;
&lt;br /&gt;
ProcessWire kann auch dafür sorgen, dass ein Modul andere &amp;quot;Kindmodule&amp;quot; gleich mitinstalliert bzw. deinstalliert wenn es nicht mehr benötigt wird. Dazu gibt man dem Modul noch die &amp;#039;install&amp;#039; dependency mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
public static function getModuleInfo() {&lt;br /&gt;
   return array(&lt;br /&gt;
       &amp;#039;title&amp;#039; =&amp;gt; &amp;#039;Log Master&amp;#039;,&lt;br /&gt;
       &amp;#039;version&amp;#039; =&amp;gt; 101,&lt;br /&gt;
       &amp;#039;author&amp;#039; =&amp;gt; &amp;#039;Lumberjack Bob&amp;#039;,&lt;br /&gt;
       &amp;#039;summary&amp;#039; =&amp;gt; &amp;#039;Log all actions on your site&amp;#039;,&lt;br /&gt;
       &amp;#039;requires&amp;#039; =&amp;gt; &amp;#039;LazyCron&amp;#039;, &lt;br /&gt;
       &amp;#039;installs&amp;#039; =&amp;gt; &amp;#039;ProcessLogMaster&amp;#039;  // added this line&lt;br /&gt;
       ); &lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ProcessWire sieht dann eine Kindabhängigkeit zu diesem Modul und handelt auch das Deinstallieren, wenn das Elternmodul deinstalliert wird.&lt;br /&gt;
&lt;br /&gt;
== CSS und JavaScript in Modulen ==&lt;br /&gt;
Bei Process Modulen möchte man für das Styling etc. im Backend oft CSS und JS Dateien hinzufügen.&lt;br /&gt;
&lt;br /&gt;
Einfach Eine Datei MeinModul.css und / oder MeinModul.js hinzufügen. JQuery ist im Admin bereits geladen daher kann eine MeinModul.js Starter Datei so aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * This JS file is only loaded when the ProcessHello module is run&lt;br /&gt;
 *&lt;br /&gt;
 * You should delete it if you have no javascript to add.&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
	// do something&lt;br /&gt;
}); &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Flexibler Umgang mit Templates - TemplateFile ==&lt;br /&gt;
TemplateFile sind eine Möglichkeit Templates zu Managen. Nützlich in Modulen oder in größeren Teams wo man sehr granuliert die Zugriffe über den Code steuern möchte.&lt;br /&gt;
 https://processwire.com/talk/topic/291-simple-tutorial-on-how-to-use-templatefile-class/&lt;br /&gt;
 https://processwire.com/api/ref/template-file/&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$out = new TemplateFile(&amp;quot;./includes/my_markup.html&amp;quot;); &lt;br /&gt;
$out-&amp;gt;set(&amp;#039;headline&amp;#039;, $page-&amp;gt;get(&amp;quot;headline|title&amp;quot;)); &lt;br /&gt;
$out-&amp;gt;set(&amp;#039;body&amp;#039;, $page-&amp;gt;body);&lt;br /&gt;
$out-&amp;gt;set(&amp;#039;sidebar&amp;#039;, $page-&amp;gt;sidebar); &lt;br /&gt;
$out-&amp;gt;set(&amp;#039;navigation&amp;#039;, $pages-&amp;gt;find(&amp;quot;parent=/&amp;quot;));&lt;br /&gt;
echo $out-&amp;gt;render();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In my_markup.html kann man headline, body... einfach als Variablen setzen. Beim Rendern werden diese dann ersetzt.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
=== Felder und Templates erstellen ===&lt;br /&gt;
In einem Modul kann man Felder und Templates automatisch erstellen. &lt;br /&gt;
 https://processwire.com/talk/topic/20533-solved-fields-templates-and-fieldgroups-how-do-they-interact/&lt;br /&gt;
&lt;br /&gt;
 For everyone not deeply into obscure PW vodoo magic, creating a template with fields is always:&lt;br /&gt;
&lt;br /&gt;
    Create a template&lt;br /&gt;
    Create a fieldgroup with the same name as the template&lt;br /&gt;
    Create your fields, save them and add them to the fieldgroup&lt;br /&gt;
    Save the fieldgroup&lt;br /&gt;
    Set the fieldgroup in the template&lt;br /&gt;
    Save the template&lt;br /&gt;
&lt;br /&gt;
* Are Fieldgroups required for adding fields to templates? What are these for?&lt;br /&gt;
** Yes, they are. As written above, they are just a necessary glue. &lt;br /&gt;
*What if I&amp;#039;d like to add fields after the template was saved and how can I add them to the same fieldgroup?&lt;br /&gt;
** Just add them to the fieldgroup&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$fg = $template-&amp;gt;fieldgroup;&lt;br /&gt;
$fg-&amp;gt;add($field);&lt;br /&gt;
$fg-&amp;gt;save();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Frontend Rendering Module ===&lt;br /&gt;
A bit old but working&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * FrontEndRender&lt;br /&gt;
 *&lt;br /&gt;
 * Author: Ben Byford&lt;br /&gt;
 *&lt;br /&gt;
 * ProcessWire 2.x&lt;br /&gt;
 * Copyright (C) 2010 by Ryan Cramer&lt;br /&gt;
 * Licensed under GNU/GPL v2, see LICENSE.TXT&lt;br /&gt;
 *&lt;br /&gt;
 * http://www.processwire.com&lt;br /&gt;
 * http://www.ryancramer.com&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
class FrontEndRender extends WireData implements Module {&lt;br /&gt;
&lt;br /&gt;
	public static function getModuleInfo() {&lt;br /&gt;
		return array(&lt;br /&gt;
			&amp;#039;title&amp;#039; =&amp;gt; &amp;#039;FrontEndRender&amp;#039;,&lt;br /&gt;
			&amp;#039;version&amp;#039; =&amp;gt; 0.1,&lt;br /&gt;
			&amp;#039;summary&amp;#039; =&amp;gt; &amp;quot;Outputs html and static variables to frontend&amp;quot;,&lt;br /&gt;
			&amp;#039;author&amp;#039; =&amp;gt; &amp;#039;Ben Byford&amp;#039;,&lt;br /&gt;
			&amp;#039;singular&amp;#039; =&amp;gt; true,&lt;br /&gt;
			&amp;#039;href&amp;#039; =&amp;gt; &amp;#039;https://github.com/benbyford/PW-starter-modules&amp;#039;&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// protected variable only accessable within module&lt;br /&gt;
	protected $name = &amp;#039;Ben&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
	/*&lt;br /&gt;
	* render function to be called in PW template like this:&lt;br /&gt;
	* $FrontEndRender = $modules-&amp;gt;getModule(&amp;#039;FrontEndRender&amp;#039;);&lt;br /&gt;
	* echo &amp;#039;&amp;lt;h1&amp;gt;&amp;#039; . $FrontEndRender-&amp;gt;render() . &amp;#039;&amp;lt;/h1&amp;gt;&amp;#039;;&lt;br /&gt;
	*&lt;br /&gt;
	*/&lt;br /&gt;
	public function render(){&lt;br /&gt;
		return &amp;quot;Hello &amp;quot; . $this-&amp;gt;name;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ProcessWire Hello World Modul ===&lt;br /&gt;
Beispiel Modul mit Hooks (liegt immer in der Standardinstallation)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php namespace ProcessWire;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * ProcessWire &amp;#039;Hello world&amp;#039; demonstration module&lt;br /&gt;
 *&lt;br /&gt;
 * Demonstrates the Module interface and how to add hooks.&lt;br /&gt;
 * &lt;br /&gt;
 * See README file for further links regarding module development.&lt;br /&gt;
 * &lt;br /&gt;
 * This file is licensed under the MIT license&lt;br /&gt;
 * https://processwire.com/about/license/mit/&lt;br /&gt;
 * &lt;br /&gt;
 * ProcessWire 3.x, Copyright 2016 by Ryan Cramer&lt;br /&gt;
 * https://processwire.com&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
class Helloworld extends WireData implements Module {&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * getModuleInfo is a module required by all modules to tell ProcessWire about them&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return array&lt;br /&gt;
	 *&lt;br /&gt;
	 */&lt;br /&gt;
	public static function getModuleInfo() {&lt;br /&gt;
&lt;br /&gt;
		return array(&lt;br /&gt;
&lt;br /&gt;
			// The module&amp;#039;s title, typically a little more descriptive than the class name&lt;br /&gt;
			&amp;#039;title&amp;#039; =&amp;gt; &amp;#039;Hello World&amp;#039;, &lt;br /&gt;
&lt;br /&gt;
			// version number &lt;br /&gt;
			&amp;#039;version&amp;#039; =&amp;gt; 3, &lt;br /&gt;
&lt;br /&gt;
			// summary is brief description of what this module is&lt;br /&gt;
			&amp;#039;summary&amp;#039; =&amp;gt; &amp;#039;An example module used for demonstration purposes.&amp;#039;,&lt;br /&gt;
			&lt;br /&gt;
			// Optional URL to more information about the module&lt;br /&gt;
			&amp;#039;href&amp;#039; =&amp;gt; &amp;#039;https://processwire.com&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
			// singular=true: indicates that only one instance of the module is allowed.&lt;br /&gt;
			// This is usually what you want for modules that attach hooks. &lt;br /&gt;
			&amp;#039;singular&amp;#039; =&amp;gt; true, &lt;br /&gt;
&lt;br /&gt;
			// autoload=true: indicates the module should be started with ProcessWire.&lt;br /&gt;
			// This is necessary for any modules that attach runtime hooks, otherwise those&lt;br /&gt;
			// hooks won&amp;#039;t get attached unless some other code calls the module on it&amp;#039;s own.&lt;br /&gt;
			// Note that autoload modules are almost always also &amp;#039;singular&amp;#039; (seen above).&lt;br /&gt;
			&amp;#039;autoload&amp;#039; =&amp;gt; true, &lt;br /&gt;
		&lt;br /&gt;
			// Optional font-awesome icon name, minus the &amp;#039;fa-&amp;#039; part&lt;br /&gt;
			&amp;#039;icon&amp;#039; =&amp;gt; &amp;#039;smile-o&amp;#039;, &lt;br /&gt;
			);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Initialize the module&lt;br /&gt;
	 *&lt;br /&gt;
	 * ProcessWire calls this when the module is loaded. For &amp;#039;autoload&amp;#039; modules, this will be called&lt;br /&gt;
	 * when ProcessWire&amp;#039;s API is ready. As a result, this is a good place to attach hooks. &lt;br /&gt;
	 *&lt;br /&gt;
	 */&lt;br /&gt;
	public function init() {&lt;br /&gt;
&lt;br /&gt;
		// add a hook after the $pages-&amp;gt;save, to issue a notice every time a page is saved&lt;br /&gt;
		$this-&amp;gt;pages-&amp;gt;addHookAfter(&amp;#039;save&amp;#039;, $this, &amp;#039;example1&amp;#039;); &lt;br /&gt;
&lt;br /&gt;
		// add a hook after each page is rendered and modify the output&lt;br /&gt;
		$this-&amp;gt;addHookAfter(&amp;#039;Page::render&amp;#039;, $this, &amp;#039;example2&amp;#039;); &lt;br /&gt;
&lt;br /&gt;
		// add a &amp;#039;hello&amp;#039; method to every page that returns &amp;quot;Hello World&amp;quot;&lt;br /&gt;
		// use &amp;quot;echo $page-&amp;gt;hello();&amp;quot; in your template file to display output&lt;br /&gt;
		$this-&amp;gt;addHook(&amp;#039;Page::hello&amp;#039;, $this, &amp;#039;example3&amp;#039;); &lt;br /&gt;
&lt;br /&gt;
		// add a &amp;#039;hello_world&amp;#039; property to every page that returns &amp;quot;Hello [user]&amp;quot;&lt;br /&gt;
		// use &amp;quot;echo $page-&amp;gt;hello_world;&amp;quot; in your template file to display output&lt;br /&gt;
		$this-&amp;gt;addHookProperty(&amp;#039;Page::hello_world&amp;#039;, $this, &amp;#039;example4&amp;#039;); &lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Example1 hooks into the pages-&amp;gt;save method and displays a notice every time a page is saved&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param HookEvent $event&lt;br /&gt;
	 *&lt;br /&gt;
	 */&lt;br /&gt;
	public function example1($event) {&lt;br /&gt;
		/** @var Page $page */&lt;br /&gt;
		$page = $event-&amp;gt;arguments[0]; &lt;br /&gt;
		$this-&amp;gt;message(&amp;quot;Hello World! You saved {$page-&amp;gt;path}.&amp;quot;); &lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Example2 hooks into every page after it&amp;#039;s rendered and adds &amp;quot;Hello World&amp;quot; text at the bottom&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param HookEvent $event&lt;br /&gt;
	 *&lt;br /&gt;
	 */&lt;br /&gt;
	public function example2($event) {&lt;br /&gt;
&lt;br /&gt;
		/** @var Page $page */&lt;br /&gt;
		$page = $event-&amp;gt;object; &lt;br /&gt;
&lt;br /&gt;
		// don&amp;#039;t add this to the admin pages&lt;br /&gt;
		if($page-&amp;gt;template == &amp;#039;admin&amp;#039;) return;&lt;br /&gt;
&lt;br /&gt;
		// add a &amp;quot;Hello World&amp;quot; paragraph right before the closing body tag&lt;br /&gt;
		$event-&amp;gt;return = str_replace(&amp;quot;&amp;lt;/body&amp;gt;&amp;quot;, &amp;quot;&amp;lt;p&amp;gt;Hello World!&amp;lt;/p&amp;gt;&amp;lt;/body&amp;gt;&amp;quot;, $event-&amp;gt;return); &lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Example3 adds a &amp;#039;hello&amp;#039; method (not property) to every page that simply returns &amp;quot;Hello World&amp;quot;&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param HookEvent $event&lt;br /&gt;
	 *&lt;br /&gt;
	 */&lt;br /&gt;
	public function example3($event) {&lt;br /&gt;
		$event-&amp;gt;return = &amp;quot;Hello World&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Example 4 adds a &amp;#039;hello_world&amp;#039; property (not method) to every page that returns &amp;quot;Hello [user]&amp;quot;&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param HookEvent $event&lt;br /&gt;
	 *&lt;br /&gt;
	 */&lt;br /&gt;
	public function example4($event) {&lt;br /&gt;
		$event-&amp;gt;return = &amp;quot;Hello &amp;quot; . $this-&amp;gt;user-&amp;gt;name; &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ProcessWire Admin Bereich mit eigener Funktionalität erweitern (Modul)===&lt;br /&gt;
 https://webdesign.tutsplus.com/tutorials/extending-the-processwire-admin-using-custom-modules--cms-26863&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
* ProcessSimpleAdminPage&lt;br /&gt;
*&lt;br /&gt;
* @author Ben Byford&lt;br /&gt;
* http://www.benbyford.com&lt;br /&gt;
*&lt;br /&gt;
* @see http://www.processwire.com&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
class ProcessSimpleAdminPage extends Process {&lt;br /&gt;
&lt;br /&gt;
    public static function getModuleInfo() {&lt;br /&gt;
        return array(&lt;br /&gt;
            &amp;#039;title&amp;#039; =&amp;gt; &amp;#039;Process Simple Admin Page&amp;#039;,&lt;br /&gt;
            &amp;#039;summary&amp;#039; =&amp;gt; &amp;#039;Simple Process module that adds new admin page with&amp;#039;,&lt;br /&gt;
            &amp;#039;version&amp;#039; =&amp;gt; 001,&lt;br /&gt;
&lt;br /&gt;
            // Modules that extend Process may specify a &amp;#039;page&amp;#039; attribute in the&lt;br /&gt;
            // getModuleInfo(), this page will automatically be given the module&lt;br /&gt;
            // process when added to teh pagetree.&lt;br /&gt;
&lt;br /&gt;
            // I have exampled but commented out the &amp;#039;page&amp;#039; settings below&lt;br /&gt;
            // so that I can show how one might add a page to install() and&lt;br /&gt;
            // uninstall() in this and other modules (that might not extend&lt;br /&gt;
            // Process)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        // 	&amp;#039;page&amp;#039; =&amp;gt; array(&lt;br /&gt;
        // 		&amp;#039;name&amp;#039; =&amp;gt; &amp;#039;site-config&amp;#039;,&lt;br /&gt;
        // 		&amp;#039;parent&amp;#039; =&amp;gt; &amp;#039;admin&amp;#039;,&lt;br /&gt;
        // 		&amp;#039;title&amp;#039; =&amp;gt; &amp;#039;Site Config&amp;#039;&lt;br /&gt;
        // 	   )&lt;br /&gt;
        );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public function execute() {&lt;br /&gt;
        return &amp;#039;&lt;br /&gt;
            &amp;lt;h2&amp;gt;Edit the text here in the module&amp;lt;/h2&amp;gt;&lt;br /&gt;
            &amp;lt;p&amp;gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam mattis eros vitae metus sodales eget suscipit purus rhoncus. Proin ultrices gravida dolor, non porttitor enim interdum vitae. Integer feugiat lacinia tincidunt. Nulla laoreet tristique tristique. Sed elementum justo a nisl elementum sit amet accumsan nisi tempor. Nulla quis eros et massa dignissim imperdiet a vitae purus.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;p&amp;gt;Donec scelerisque pulvinar sem eu lobortis. Maecenas turpis ipsum, tempus dictum pharetra eu, consectetur vitae arcu. Fusce orci mauris, semper at tempus quis, volutpat molestie tellus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed quam tortor, tincidunt sed semper lacinia, scelerisque dapibus quam. Morbi at nisi luctus lacus auctor ultrices eu eu leo.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;p&amp;gt;Praesent faucibus purus id felis tincidunt dignissim. Sed sit amet ligula mi, eget semper dui. Proin consectetur gravida massa, nec luctus purus hendrerit in. Etiam volutpat, elit non venenatis suscipit, libero neque consectetur diam, id rutrum magna odio ac ligula. Maecenas sollicitudin congue neque fermentum vestibulum. Morbi nec leo nisi. Donec at nisl odio, et porta ligula.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;p&amp;gt;Sed quis arcu nisi, ac tempor augue. Praesent non elit libero, a ullamcorper lorem. Curabitur porta odio eu nunc ultricies interdum id nec risus. Donec nibh nibh, porta eget vehicula ac, aliquet eget ante. Phasellus eget lorem eu eros eleifend ultrices. Cras sit amet neque sit amet nibh fringilla cursus ut id mauris. Praesent quis nunc justo, sed suscipit lectus. Phasellus eget ultrices risus. Curabitur eu semper est. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut suscipit, nisl ut imperdiet eleifend, turpis arcu placerat tortor, nec laoreet lacus neque ac tellus. Aenean ac lacus justo, quis ultricies nisi.&amp;lt;/p&amp;gt;&lt;br /&gt;
            &amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
    public function install(){&lt;br /&gt;
&lt;br /&gt;
        // create new page to add to CMS&lt;br /&gt;
		$page = new Page();&lt;br /&gt;
&lt;br /&gt;
        // add page attributes&lt;br /&gt;
        $page-&amp;gt;template = &amp;quot;admin&amp;quot;;&lt;br /&gt;
        $page-&amp;gt;name = &amp;quot;cms-faq&amp;quot;;&lt;br /&gt;
        $page-&amp;gt;title = &amp;quot;CMS FAQ&amp;quot;;&lt;br /&gt;
        $page-&amp;gt;save();&lt;br /&gt;
&lt;br /&gt;
        // set this module as the page process, this allows us to display the above&lt;br /&gt;
        $page-&amp;gt;process = &amp;#039;ProcessSimpleAdminPage&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
        // get admin page and set as page parent&lt;br /&gt;
        $admin = $this-&amp;gt;pages-&amp;gt;get(&amp;quot;id=2&amp;quot;);&lt;br /&gt;
        $page-&amp;gt;parent = $admin;&lt;br /&gt;
&lt;br /&gt;
        // save page&lt;br /&gt;
        $page-&amp;gt;save();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public function uninstall(){&lt;br /&gt;
&lt;br /&gt;
        // delete created page&lt;br /&gt;
        $page = $this-&amp;gt;pages-&amp;gt;get(&amp;quot;name=cms-faq&amp;quot;);&lt;br /&gt;
        if(count($page)) $this-&amp;gt;pages-&amp;gt;delete($page, true);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ProcessWire Textformatter Modul ===&lt;br /&gt;
 https://webdesign.tutsplus.com/tutorials/extending-the-processwire-admin-using-custom-modules--cms-26863&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TextformatterFindReplace&lt;br /&gt;
 *&lt;br /&gt;
 * Author: Ben Byford&lt;br /&gt;
 *&lt;br /&gt;
 * ProcessWire 2.x&lt;br /&gt;
 * Copyright (C) 2010 by Ryan Cramer&lt;br /&gt;
 * Licensed under GNU/GPL v2, see LICENSE.TXT&lt;br /&gt;
 *&lt;br /&gt;
 * http://www.processwire.com&lt;br /&gt;
 * http://www.ryancramer.com&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
class TextformatterFindReplace extends Textformatter implements Module {&lt;br /&gt;
&lt;br /&gt;
	public static function getModuleInfo() {&lt;br /&gt;
		return array(&lt;br /&gt;
			&amp;#039;title&amp;#039; =&amp;gt; &amp;#039;TextformatterFindReplace&amp;#039;,&lt;br /&gt;
			&amp;#039;version&amp;#039; =&amp;gt; 0.1,&lt;br /&gt;
			&amp;#039;summary&amp;#039; =&amp;gt; &amp;quot;Finds and replaces any instance of config input to config output&amp;quot;,&lt;br /&gt;
			&amp;#039;author&amp;#039; =&amp;gt; &amp;#039;Ben Byford&amp;#039;,&lt;br /&gt;
			&amp;#039;singular&amp;#039; =&amp;gt; true,&lt;br /&gt;
			&amp;#039;href&amp;#039; =&amp;gt; &amp;#039;https://github.com/benbyford/PW-starter-modules&amp;#039;&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
     * Find and Replace the input string&lt;br /&gt;
     *&lt;br /&gt;
     * @param string $str The block of text to parse&lt;br /&gt;
     *&lt;br /&gt;
     * The incoming string is replaced with the formatted version of itself.&lt;br /&gt;
	 **/&lt;br /&gt;
&lt;br /&gt;
	public function format(&amp;amp;$str) {&lt;br /&gt;
		$find = $this-&amp;gt;findStr;&lt;br /&gt;
		$str = preg_replace_callback($find, array($this,&amp;quot;replace&amp;quot;), $str);&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// adding three underscores to a function allows other modules to hook it&lt;br /&gt;
	public function ___replace($match) {&lt;br /&gt;
		return $this-&amp;gt;replaceStr;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Admin Funktionalität: Countdown zum Seitenveröffentlichen ===&lt;br /&gt;
 https://webdesign.tutsplus.com/tutorials/extending-the-processwire-admin-using-custom-modules--cms-26863&lt;br /&gt;
&lt;br /&gt;
The module PageDeferredPublish, on clicking one of the &amp;#039;&amp;#039;&amp;#039;Publish Later buttons&amp;#039;&amp;#039;&amp;#039;, sets LazyCron to check that page’s countdown every minute and publishes the page when its countdown reaches 0. This means I can publish a page approximately 24 hours in advance (obviously the checking interval and delay time can be changed to your requirements).&lt;br /&gt;
&lt;br /&gt;
I did this by:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Creating two fields&amp;#039;&amp;#039;&amp;#039; within my install() function: a checkbox field to set to true when a button is checked to indicate the page should countdown, and a countdown field to store the count in seconds for that specific page.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Adding hooks&amp;#039;&amp;#039;&amp;#039; to both &amp;#039;&amp;#039;ProcessPageEdit::buildForm&amp;#039;&amp;#039; and &amp;#039;&amp;#039;ProcessPageListActions::getExtraActions&amp;#039;&amp;#039; enabling me to add the two buttons.&lt;br /&gt;
&lt;br /&gt;
Checking to see if one of the buttons was clicked with my &amp;#039;&amp;#039;&amp;#039;ready() function&amp;#039;&amp;#039;&amp;#039; then setting the corresponding page’s checkbox to true.&lt;br /&gt;
&lt;br /&gt;
Using a &amp;#039;&amp;#039;&amp;#039;LazyCron hook function&amp;#039;&amp;#039;&amp;#039; to check all pages that are unpublished for true checkboxes and then comparing the seconds field to see if the page needs publishing. If not then deduct the elapsed time in seconds.&lt;br /&gt;
&lt;br /&gt;
The result is a &amp;#039;&amp;#039;&amp;#039;module that has settings&amp;#039;&amp;#039;&amp;#039; (the time interval to check and publish at a later time), &amp;#039;&amp;#039;&amp;#039;hooks into the admin&amp;#039;&amp;#039;&amp;#039; using buttons and fields, and enables us to &amp;#039;&amp;#039;&amp;#039;use other modules installe&amp;#039;&amp;#039;&amp;#039;d in PW (i.e. LazyCron).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * DeferredPublish (0.0.1)&lt;br /&gt;
 * DeferredPublish publishes a page after a defined amount of time has elapsed using lazycron.&lt;br /&gt;
 *&lt;br /&gt;
 * @author Ben Byford&lt;br /&gt;
 * http://www.benbyford.com&lt;br /&gt;
 *&lt;br /&gt;
 * ProcessWire 2.x&lt;br /&gt;
 * Copyright (C) 2011 by Ryan Cramer&lt;br /&gt;
 * Licensed under GNU/GPL v2, see LICENSE.TXT&lt;br /&gt;
 *&lt;br /&gt;
 * http://www.processwire.com&lt;br /&gt;
 * http://www.ryancramer.com&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
class PageDeferredPublish extends WireData implements Module {&lt;br /&gt;
&lt;br /&gt;
	public static function getModuleInfo() {&lt;br /&gt;
		return array(&lt;br /&gt;
			&amp;#039;title&amp;#039; =&amp;gt; &amp;quot;PageDeferredPublish&amp;quot;,&lt;br /&gt;
			&amp;#039;version&amp;#039; =&amp;gt; &amp;quot;0.0.1&amp;quot;,&lt;br /&gt;
			&amp;#039;summary&amp;#039; =&amp;gt; &amp;quot;PageDeferredPublish&amp;quot;,&lt;br /&gt;
			&amp;#039;author&amp;#039; =&amp;gt; &amp;quot;Ben Byford&amp;quot;,&lt;br /&gt;
			&amp;#039;href&amp;#039; =&amp;gt; &amp;quot;https://github.com/benbyford/PW-intermediate-modules&amp;quot;,&lt;br /&gt;
			&amp;#039;icon&amp;#039; =&amp;gt; &amp;quot;clock-o&amp;quot;,&lt;br /&gt;
			&amp;#039;autoload&amp;#039; =&amp;gt; true,&lt;br /&gt;
			&amp;#039;singular&amp;#039; =&amp;gt; true,&lt;br /&gt;
			&amp;#039;requires&amp;#039; =&amp;gt; &amp;quot;LazyCron&amp;quot;,&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	private $postPubLater 	= null;&lt;br /&gt;
	private $pageID 		= null;&lt;br /&gt;
	private $pagePubLater 	= null;&lt;br /&gt;
	private $currentPage	= null;&lt;br /&gt;
&lt;br /&gt;
	private $submitName 	= &amp;#039;pdp_pub_later_submit&amp;#039;;&lt;br /&gt;
	private $listPageName	= &amp;#039;pdp_pub_later_list&amp;#039;;&lt;br /&gt;
	private $fieldName 		= &amp;#039;pdp_pub_later&amp;#039;;&lt;br /&gt;
	private $checkboxName	= &amp;#039;pdp_pub_later_check&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
	private $defaultInterval = &amp;#039;everyMinute&amp;#039;;&lt;br /&gt;
	private $defaultTime 	= 86400;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	public function install(){&lt;br /&gt;
		// add new fields needed for module&lt;br /&gt;
		$this-&amp;gt;installFields();&lt;br /&gt;
	}&lt;br /&gt;
	public function uninstall(){&lt;br /&gt;
		// uninstall fields&lt;br /&gt;
		$this-&amp;gt;uninstallFields();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// initialize the hook in your AutoLoad module&lt;br /&gt;
	public function init() {&lt;br /&gt;
&lt;br /&gt;
		// get defaults from module setting in CMS&lt;br /&gt;
		$this-&amp;gt;defaultTime = $this-&amp;gt;pub_after;&lt;br /&gt;
		$this-&amp;gt;defaultInterval = $this-&amp;gt;cron_check;&lt;br /&gt;
&lt;br /&gt;
		// get admin URL&lt;br /&gt;
		$this-&amp;gt;adminUrl = $this-&amp;gt;wire(&amp;#039;config&amp;#039;)-&amp;gt;urls-&amp;gt;admin;&lt;br /&gt;
&lt;br /&gt;
		// add hooks to CRON, PageList, PageEdit&lt;br /&gt;
	    $this-&amp;gt;addHookAfter(&amp;quot;LazyCron::{$this-&amp;gt;defaultInterval}&amp;quot;, $this, &amp;#039;publishDefferedPages&amp;#039;);&lt;br /&gt;
		$this-&amp;gt;addHook(&amp;quot;ProcessPageListActions::getExtraActions&amp;quot;, $this, &amp;#039;hookPageListActions&amp;#039;);&lt;br /&gt;
		$this-&amp;gt;addHookAfter(&amp;quot;ProcessPageEdit::buildForm&amp;quot;, $this, &amp;quot;editForm&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public function ready() {&lt;br /&gt;
&lt;br /&gt;
		// if list button clicked then grab id&lt;br /&gt;
		$this-&amp;gt;pagePubLater = $this-&amp;gt;input-&amp;gt;get($this-&amp;gt;listPageName);&lt;br /&gt;
		$this-&amp;gt;pageID = $this-&amp;gt;input-&amp;gt;id;&lt;br /&gt;
&lt;br /&gt;
		// get page&lt;br /&gt;
		$this-&amp;gt;currentPage = $this-&amp;gt;pages-&amp;gt;get($this-&amp;gt;pageID);&lt;br /&gt;
&lt;br /&gt;
		// if pagelist pub later submit button clicked&lt;br /&gt;
		if($this-&amp;gt;pagePubLater){&lt;br /&gt;
			$this-&amp;gt;message(&amp;quot;Page {$this-&amp;gt;currentPage-&amp;gt;name} deffered for publish.&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// if page edit submit button clicked&lt;br /&gt;
		$this-&amp;gt;postPubLater = $this-&amp;gt;input-&amp;gt;post($this-&amp;gt;submitName);&lt;br /&gt;
		if($this-&amp;gt;postPubLater){&lt;br /&gt;
			$this-&amp;gt;message(&amp;quot;Page {$this-&amp;gt;currentPage-&amp;gt;name} deffered for publish.&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// if either deffered publish sumbit found then publish page later&lt;br /&gt;
		if($this-&amp;gt;pagePubLater || $this-&amp;gt;postPubLater){&lt;br /&gt;
			$this-&amp;gt;publishLater();&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/*&lt;br /&gt;
	*	Hook: ProcessPageEdit::buildForm&lt;br /&gt;
	*&lt;br /&gt;
	*	add Publish Later button to edit page if not yet published&lt;br /&gt;
	*/&lt;br /&gt;
	public function ___editForm(HookEvent $form) {&lt;br /&gt;
&lt;br /&gt;
		// get the InputFieldForm object from the event (return value of buildForm())&lt;br /&gt;
		$form = $form-&amp;gt;return;&lt;br /&gt;
&lt;br /&gt;
		$page = $this-&amp;gt;pages-&amp;gt;get($this-&amp;gt;input-&amp;gt;get-&amp;gt;id);&lt;br /&gt;
		$check = $page-&amp;gt;get($this-&amp;gt;checkboxName);&lt;br /&gt;
&lt;br /&gt;
		// check if publish button available and therfore unpublished&lt;br /&gt;
		$target = $form-&amp;gt;get(&amp;#039;submit_publish&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
		if($target &amp;amp;&amp;amp; $check == false){&lt;br /&gt;
&lt;br /&gt;
			// get InputfieldText module&lt;br /&gt;
			$submit2 = $this-&amp;gt;modules-&amp;gt;get(&amp;#039;InputfieldSubmit&amp;#039;);&lt;br /&gt;
			$submit2-&amp;gt;attr(&amp;#039;name&amp;#039;, $this-&amp;gt;submitName);&lt;br /&gt;
			$submit2-&amp;gt;attr(&amp;#039;id&amp;#039;, &amp;#039;publish_later&amp;#039;);&lt;br /&gt;
			$submit2-&amp;gt;attr(&amp;#039;class&amp;#039;, &amp;#039;ui-button ui-widget ui-corner-all head_button_clone ui-state-default ui-priority-secondary&amp;#039;);&lt;br /&gt;
			$submit2-&amp;gt;attr(&amp;#039;value&amp;#039;, &amp;#039;Publish Later&amp;#039;); // Button: save unpublished&lt;br /&gt;
&lt;br /&gt;
			// get form element save and place before&lt;br /&gt;
			$target = $form-&amp;gt;get(&amp;#039;submit_save&amp;#039;);&lt;br /&gt;
			$form-&amp;gt;insertBefore($submit2, $target);&lt;br /&gt;
&lt;br /&gt;
			$form-&amp;gt;return = $form;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public function ___hookPageListActions(HookEvent $event) {&lt;br /&gt;
&lt;br /&gt;
		// get current page&lt;br /&gt;
		$page = $event-&amp;gt;arguments[0];&lt;br /&gt;
&lt;br /&gt;
		// check to see if page is published&lt;br /&gt;
		$pagePub = $page-&amp;gt;is(Page::statusUnpublished);&lt;br /&gt;
&lt;br /&gt;
		// check to see if page template has deffered field&lt;br /&gt;
		$pageHasDefferField = $page-&amp;gt;get($this-&amp;gt;fieldName);&lt;br /&gt;
&lt;br /&gt;
		$actions = array();&lt;br /&gt;
&lt;br /&gt;
		// don&amp;#039;t get homepage or pages that are already published or are being deffered for publish&lt;br /&gt;
		if($page-&amp;gt;id &amp;gt; 1 &amp;amp;&amp;amp; $pagePub == &amp;quot;published&amp;quot; &amp;amp;&amp;amp; !is_null($pageHasDefferField) &amp;amp;&amp;amp; $page-&amp;gt;get($this-&amp;gt;checkboxName) == false) {&lt;br /&gt;
&lt;br /&gt;
			$actions[&amp;#039;publish_later&amp;#039;] = array(&lt;br /&gt;
				&amp;#039;cn&amp;#039;   =&amp;gt; &amp;#039;PublishLater&amp;#039;,&lt;br /&gt;
				&amp;#039;name&amp;#039; =&amp;gt; &amp;#039;pub later&amp;#039;,&lt;br /&gt;
				&amp;#039;url&amp;#039;  =&amp;gt; &amp;quot;{$this-&amp;gt;adminUrl}?{$this-&amp;gt;listPageName}=1&amp;amp;id={$page-&amp;gt;id}&amp;quot;,&lt;br /&gt;
			);&lt;br /&gt;
		}&lt;br /&gt;
		if(count($actions)) $event-&amp;gt;return = $actions + $event-&amp;gt;return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/*&lt;br /&gt;
	* Publish Page on cron job&lt;br /&gt;
	*&lt;br /&gt;
	* Gets deffered page and publishes&lt;br /&gt;
	*/&lt;br /&gt;
	public function ___publish($page) {&lt;br /&gt;
		$page-&amp;gt;removeStatus(Page::statusUnpublished);&lt;br /&gt;
		$page-&amp;gt;removeStatus(Page::statusHidden);&lt;br /&gt;
		$page-&amp;gt;Save();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/*&lt;br /&gt;
	* Main publish later function&lt;br /&gt;
	*&lt;br /&gt;
	* Gets deffered page and sets fields to be checked be lazy cron&lt;br /&gt;
	*/&lt;br /&gt;
	private function ___publishLater() {&lt;br /&gt;
&lt;br /&gt;
		// get page&lt;br /&gt;
		$page = $this-&amp;gt;pages-&amp;gt;get($this-&amp;gt;pageID);&lt;br /&gt;
&lt;br /&gt;
		// set output formatting to false&lt;br /&gt;
		$page-&amp;gt;of(false);&lt;br /&gt;
&lt;br /&gt;
		//  set field time to settings default time and checkbox to true&lt;br /&gt;
		$page-&amp;gt;set($this-&amp;gt;checkboxName, true);&lt;br /&gt;
		$page-&amp;gt;set($this-&amp;gt;fieldName, $this-&amp;gt;defaultTime);&lt;br /&gt;
&lt;br /&gt;
		// save page&lt;br /&gt;
		$page-&amp;gt;save();&lt;br /&gt;
		$page-&amp;gt;of(true);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/*&lt;br /&gt;
	* Lazy Cron hook function&lt;br /&gt;
	*&lt;br /&gt;
	* Triggers every [set time interval] and checks pages&lt;br /&gt;
	* Publishes page if time runout&lt;br /&gt;
	*&lt;br /&gt;
	* Adds publish page log&lt;br /&gt;
	*/&lt;br /&gt;
	public function ___publishDefferedPages(HookEvent $e){&lt;br /&gt;
&lt;br /&gt;
		// seconds since last lazycron&lt;br /&gt;
		$seconds = $e-&amp;gt;arguments[0];&lt;br /&gt;
&lt;br /&gt;
		// find all pages with deffered field&lt;br /&gt;
		$defferedPages = $this-&amp;gt;pages-&amp;gt;find(&amp;quot;{$this-&amp;gt;checkboxName}=1,include=unpublished&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		// for each page decrease time for deffered field&lt;br /&gt;
		foreach ($defferedPages as $page) {&lt;br /&gt;
&lt;br /&gt;
			// get current page time&lt;br /&gt;
			$timeTillPublish = $page-&amp;gt;get($this-&amp;gt;fieldName);&lt;br /&gt;
&lt;br /&gt;
			// set time to time minus time past&lt;br /&gt;
			$timeLeft = $timeTillPublish - $seconds;&lt;br /&gt;
&lt;br /&gt;
			// if time passed 0 or less then publish page&lt;br /&gt;
			$page-&amp;gt;of(false);&lt;br /&gt;
			if($timeLeft &amp;lt;= 0){&lt;br /&gt;
				// remove flags and save&lt;br /&gt;
				$this-&amp;gt;publish($page);&lt;br /&gt;
&lt;br /&gt;
				$page-&amp;gt;set($this-&amp;gt;fieldName, 0);&lt;br /&gt;
				$page-&amp;gt;set($this-&amp;gt;checkboxName, 0);&lt;br /&gt;
&lt;br /&gt;
				// log a page has been published&lt;br /&gt;
				$log = wire(&amp;#039;log&amp;#039;);&lt;br /&gt;
				$log-&amp;gt;message(&amp;#039;CRON:&amp;#039;. $seconds .&amp;#039; Pages: &amp;#039;. $page-&amp;gt;name .&amp;#039; published&amp;#039;);&lt;br /&gt;
			}else{&lt;br /&gt;
				$page-&amp;gt;set($this-&amp;gt;fieldName, $timeLeft);&lt;br /&gt;
			}&lt;br /&gt;
			// save page time&lt;br /&gt;
			$page-&amp;gt;Save();&lt;br /&gt;
			$page-&amp;gt;of(true);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/*&lt;br /&gt;
	* Install new module specific fields&lt;br /&gt;
	*/&lt;br /&gt;
	private function installFields(){&lt;br /&gt;
&lt;br /&gt;
		// install pub later checkbox field&lt;br /&gt;
		// find installed fields&lt;br /&gt;
		$f = $this-&amp;gt;fields-&amp;gt;get($this-&amp;gt;fieldName);&lt;br /&gt;
		if($f){&lt;br /&gt;
&lt;br /&gt;
			// if field already found then don&amp;#039;t try and make it&lt;br /&gt;
			$this-&amp;gt;message($this-&amp;gt;fieldName . &amp;#039; field found&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
		}else{&lt;br /&gt;
&lt;br /&gt;
			// create new field object to store crontime&lt;br /&gt;
			$f = new Field();&lt;br /&gt;
			// get a field type&lt;br /&gt;
			$f-&amp;gt;type = $this-&amp;gt;modules-&amp;gt;get(&amp;quot;FieldtypeInteger&amp;quot;);&lt;br /&gt;
			$f-&amp;gt;name = $this-&amp;gt;fieldName;&lt;br /&gt;
			$f-&amp;gt;label = &amp;#039;Publish Time Left&amp;#039;;&lt;br /&gt;
			$f-&amp;gt;defaultValue = $this-&amp;gt;defaultTime;&lt;br /&gt;
			$f-&amp;gt;icon = &amp;#039;clock-o&amp;#039;;&lt;br /&gt;
			$f-&amp;gt;columnWidth = 50;&lt;br /&gt;
			$f-&amp;gt;collapsed = 1;&lt;br /&gt;
			$f-&amp;gt;flags = 4;&lt;br /&gt;
&lt;br /&gt;
			$f-&amp;gt;save(); // save the field&lt;br /&gt;
&lt;br /&gt;
			// create new field object to store whether to publish or not&lt;br /&gt;
			$f = new Field();&lt;br /&gt;
			// get a field type&lt;br /&gt;
			$f-&amp;gt;type = $this-&amp;gt;modules-&amp;gt;get(&amp;quot;FieldtypeCheckbox&amp;quot;);&lt;br /&gt;
			$f-&amp;gt;name = $this-&amp;gt;checkboxName;&lt;br /&gt;
			$f-&amp;gt;label = &amp;#039;Publish Page later&amp;#039;;&lt;br /&gt;
			$f-&amp;gt;defaultValue = false;&lt;br /&gt;
			$f-&amp;gt;columnWidth = 50;&lt;br /&gt;
			$f-&amp;gt;icon = &amp;#039;clock-o&amp;#039;;&lt;br /&gt;
			$f-&amp;gt;collapsed = 1;&lt;br /&gt;
			$f-&amp;gt;flags = 4;&lt;br /&gt;
&lt;br /&gt;
			$f-&amp;gt;save(); // save the field&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/*&lt;br /&gt;
	* Uninstall module specific fields&lt;br /&gt;
	*/&lt;br /&gt;
	private function uninstallFields(){&lt;br /&gt;
&lt;br /&gt;
		// find installed fields&lt;br /&gt;
		$fInt = $this-&amp;gt;fields-&amp;gt;get($this-&amp;gt;fieldName);&lt;br /&gt;
		$fCheck = $this-&amp;gt;fields-&amp;gt;get($this-&amp;gt;checkboxName);&lt;br /&gt;
&lt;br /&gt;
		if($fInt &amp;amp;&amp;amp; $fCheck){&lt;br /&gt;
			$fieldIntUsed = $fInt-&amp;gt;numFieldgroups();&lt;br /&gt;
			$fieldCheckUsed = $fCheck-&amp;gt;numFieldgroups();&lt;br /&gt;
&lt;br /&gt;
			if($fieldIntUsed){&lt;br /&gt;
				// field in use by template&lt;br /&gt;
				$this-&amp;gt;message(&amp;#039;Unable to uninstall field &amp;#039;.$fInt-&amp;gt;name);&lt;br /&gt;
			}else{&lt;br /&gt;
				// delete installed fields&lt;br /&gt;
				$this-&amp;gt;fields-&amp;gt;delete($fInt);&lt;br /&gt;
				$this-&amp;gt;fields-&amp;gt;save;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if($fieldCheckUsed){&lt;br /&gt;
				// field in use by template&lt;br /&gt;
				$this-&amp;gt;message(&amp;#039;Unable to uninstall field &amp;#039;.$fCheck-&amp;gt;name);&lt;br /&gt;
			}else{&lt;br /&gt;
				// delete installed fields&lt;br /&gt;
				$this-&amp;gt;fields-&amp;gt;delete($fCheck);&lt;br /&gt;
				$this-&amp;gt;fields-&amp;gt;save;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Inputfield / Fieldtype ===&lt;br /&gt;
[[ProcessWire - Fieldtype erstellen (Module)]]&lt;br /&gt;
&lt;br /&gt;
=== Konfigurationsdatei statt getModuleInfo ===&lt;br /&gt;
Bei größeren Konfigruation (z.B. Admin Page Navigation) sinnvoll.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * ProcessHello.info.php&lt;br /&gt;
 * &lt;br /&gt;
 * Return information about this module.&lt;br /&gt;
 *&lt;br /&gt;
 * If preferred, you can use a getModuleInfo() method in your module file, &lt;br /&gt;
 * or you can use a ModuleName.info.json file (if you prefer JSON definition). &lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
$info = array(&lt;br /&gt;
	// Your module&amp;#039;s title&lt;br /&gt;
	&amp;#039;title&amp;#039; =&amp;gt; &amp;#039;Hello: Process Module Example&amp;#039;, &lt;br /&gt;
	// A 1 sentence description of what your module does&lt;br /&gt;
	&amp;#039;summary&amp;#039; =&amp;gt; &amp;#039;A starting point module skeleton from which to build your own Process module.&amp;#039;, &lt;br /&gt;
	// Module version number: use 1 for 0.0.1 or 100 for 1.0.0, and so on&lt;br /&gt;
	&amp;#039;version&amp;#039; =&amp;gt; 1, &lt;br /&gt;
	// Name of person who created this module (change to your name)&lt;br /&gt;
	&amp;#039;author&amp;#039; =&amp;gt; &amp;#039;Ryan Cramer&amp;#039;, &lt;br /&gt;
	// Icon to accompany this module (optional), uses font-awesome icon names, minus the &amp;quot;fa-&amp;quot; part&lt;br /&gt;
	&amp;#039;icon&amp;#039; =&amp;gt; &amp;#039;thumbs-up&amp;#039;, &lt;br /&gt;
	// URL to more info: change to your full modules.processwire.com URL (if available), or something else if you prefer&lt;br /&gt;
	&amp;#039;href&amp;#039; =&amp;gt; &amp;#039;http://modules.processwire.com/&amp;#039;, &lt;br /&gt;
	// name of permission required of users to execute this Process (optional)&lt;br /&gt;
	&amp;#039;permission&amp;#039; =&amp;gt; &amp;#039;helloworld&amp;#039;, &lt;br /&gt;
	// permissions that you want automatically installed/uninstalled with this module (name =&amp;gt; description)&lt;br /&gt;
	&amp;#039;permissions&amp;#039; =&amp;gt; array(&lt;br /&gt;
		&amp;#039;helloworld&amp;#039; =&amp;gt; &amp;#039;Run the HelloWorld module&amp;#039;&lt;br /&gt;
	), &lt;br /&gt;
	&lt;br /&gt;
	// page that you want created to execute this module&lt;br /&gt;
	&amp;#039;page&amp;#039; =&amp;gt; array(&lt;br /&gt;
		&amp;#039;name&amp;#039; =&amp;gt; &amp;#039;helloworld&amp;#039;,&lt;br /&gt;
		&amp;#039;parent&amp;#039; =&amp;gt; &amp;#039;setup&amp;#039;, &lt;br /&gt;
		&amp;#039;title&amp;#039; =&amp;gt; &amp;#039;Hello World&amp;#039;&lt;br /&gt;
	),&lt;br /&gt;
	// optional extra navigation that appears in admin&lt;br /&gt;
	// if you change this, you&amp;#039;ll need to a Modules &amp;gt; Refresh to see changes&lt;br /&gt;
	&amp;#039;nav&amp;#039; =&amp;gt; array(&lt;br /&gt;
		array(&lt;br /&gt;
			&amp;#039;url&amp;#039; =&amp;gt; &amp;#039;&amp;#039;, &lt;br /&gt;
			&amp;#039;label&amp;#039; =&amp;gt; &amp;#039;Hello&amp;#039;, &lt;br /&gt;
			&amp;#039;icon&amp;#039; =&amp;gt; &amp;#039;smile-o&amp;#039;, &lt;br /&gt;
		), &lt;br /&gt;
		array(&lt;br /&gt;
			&amp;#039;url&amp;#039; =&amp;gt; &amp;#039;something/&amp;#039;, &lt;br /&gt;
			&amp;#039;label&amp;#039; =&amp;gt; &amp;#039;Something&amp;#039;, &lt;br /&gt;
			&amp;#039;icon&amp;#039; =&amp;gt; &amp;#039;beer&amp;#039;, &lt;br /&gt;
		),&lt;br /&gt;
	)&lt;br /&gt;
	// for more options that you may specify here, see the file: /wire/core/Process.php&lt;br /&gt;
	// and the file: /wire/core/Module.php&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interessantes - Read On ==&lt;br /&gt;
 https://processwire.com/talk/topic/24067-solved-settings-fields-that-dont-save-to-database/&lt;br /&gt;
 https://processwire.com/talk/topic/24075-solved-create-field-and-add-to-template/&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=XML_erzeugen&amp;diff=25413</id>
		<title>XML erzeugen</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=XML_erzeugen&amp;diff=25413"/>
		<updated>2021-09-22T15:22:34Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: /* Mit XMLWriter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Siehe auch ==&lt;br /&gt;
 [[SimpleXML]]&lt;br /&gt;
&lt;br /&gt;
== Mit dem DOM (Document Object Model) ==&lt;br /&gt;
 http://de3.php.net/manual/en/book.dom.php&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
 https://stackoverflow.com/questions/143122/using-simplexml-to-create-an-xml-object-from-scratch&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$domDoc = new DOMDocument;&lt;br /&gt;
$rootElt = $domDoc-&amp;gt;createElement(&amp;#039;root&amp;#039;); &lt;br /&gt;
$rootNode = $domDoc-&amp;gt;appendChild($rootElt);&lt;br /&gt;
&lt;br /&gt;
$subElt = $domDoc-&amp;gt;createElement(&amp;#039;foo&amp;#039;);&lt;br /&gt;
$attr = $domDoc-&amp;gt;createAttribute(&amp;#039;ah&amp;#039;);&lt;br /&gt;
$attrVal = $domDoc-&amp;gt;createTextNode(&amp;#039;OK&amp;#039;);&lt;br /&gt;
$attr-&amp;gt;appendChild($attrVal);&lt;br /&gt;
$subElt-&amp;gt;appendChild($attr);&lt;br /&gt;
$subNode = $rootNode-&amp;gt;appendChild($subElt);&lt;br /&gt;
&lt;br /&gt;
$textNode = $domDoc-&amp;gt;createTextNode(&amp;#039;Wow, it works!&amp;#039;);&lt;br /&gt;
$subNode-&amp;gt;appendChild($textNode);&lt;br /&gt;
&lt;br /&gt;
echo htmlentities($domDoc-&amp;gt;saveXML());&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mit dem DOM sind recht flexible Manipulationen möglich:&lt;br /&gt;
 $elem-&amp;gt;append($doc-&amp;gt;p(&amp;#039;This is a paragraph&amp;#039;)); &lt;br /&gt;
 $elem-&amp;gt;append(&amp;#039;Some text&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
== Mit XMLWriter ==&lt;br /&gt;
 https://www.php.net/manual/en/intro.xmlwriter.php&lt;br /&gt;
 https://www.php.net/manual/de/example.xmlwriter-simple.php&lt;br /&gt;
&lt;br /&gt;
Soll einfacher sein als mit dem DOM Object&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$w=new XMLWriter();&lt;br /&gt;
$w-&amp;gt;openMemory();&lt;br /&gt;
$w-&amp;gt;startDocument(&amp;#039;1.0&amp;#039;,&amp;#039;UTF-8&amp;#039;);&lt;br /&gt;
$w-&amp;gt;startElement(&amp;quot;root&amp;quot;);&lt;br /&gt;
$w-&amp;gt;writeAttribute(&amp;quot;ah&amp;quot;, &amp;quot;OK&amp;quot;);&lt;br /&gt;
$w-&amp;gt;text(&amp;#039;Wow, it works!&amp;#039;);&lt;br /&gt;
$w-&amp;gt;endElement();&lt;br /&gt;
echo htmlentities($w-&amp;gt;outputMemory(true));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=XML_erzeugen&amp;diff=25412</id>
		<title>XML erzeugen</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=XML_erzeugen&amp;diff=25412"/>
		<updated>2021-09-22T15:20:48Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: /* Mit XMLWriter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Siehe auch ==&lt;br /&gt;
 [[SimpleXML]]&lt;br /&gt;
&lt;br /&gt;
== Mit dem DOM (Document Object Model) ==&lt;br /&gt;
 http://de3.php.net/manual/en/book.dom.php&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
 https://stackoverflow.com/questions/143122/using-simplexml-to-create-an-xml-object-from-scratch&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$domDoc = new DOMDocument;&lt;br /&gt;
$rootElt = $domDoc-&amp;gt;createElement(&amp;#039;root&amp;#039;); &lt;br /&gt;
$rootNode = $domDoc-&amp;gt;appendChild($rootElt);&lt;br /&gt;
&lt;br /&gt;
$subElt = $domDoc-&amp;gt;createElement(&amp;#039;foo&amp;#039;);&lt;br /&gt;
$attr = $domDoc-&amp;gt;createAttribute(&amp;#039;ah&amp;#039;);&lt;br /&gt;
$attrVal = $domDoc-&amp;gt;createTextNode(&amp;#039;OK&amp;#039;);&lt;br /&gt;
$attr-&amp;gt;appendChild($attrVal);&lt;br /&gt;
$subElt-&amp;gt;appendChild($attr);&lt;br /&gt;
$subNode = $rootNode-&amp;gt;appendChild($subElt);&lt;br /&gt;
&lt;br /&gt;
$textNode = $domDoc-&amp;gt;createTextNode(&amp;#039;Wow, it works!&amp;#039;);&lt;br /&gt;
$subNode-&amp;gt;appendChild($textNode);&lt;br /&gt;
&lt;br /&gt;
echo htmlentities($domDoc-&amp;gt;saveXML());&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mit dem DOM sind recht flexible Manipulationen möglich:&lt;br /&gt;
 $elem-&amp;gt;append($doc-&amp;gt;p(&amp;#039;This is a paragraph&amp;#039;)); &lt;br /&gt;
 $elem-&amp;gt;append(&amp;#039;Some text&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
== Mit XMLWriter ==&lt;br /&gt;
 https://www.php.net/manual/en/intro.xmlwriter.php&lt;br /&gt;
Soll einfacher sein als mit dem DOM Object&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$w=new XMLWriter();&lt;br /&gt;
$w-&amp;gt;openMemory();&lt;br /&gt;
$w-&amp;gt;startDocument(&amp;#039;1.0&amp;#039;,&amp;#039;UTF-8&amp;#039;);&lt;br /&gt;
$w-&amp;gt;startElement(&amp;quot;root&amp;quot;);&lt;br /&gt;
$w-&amp;gt;writeAttribute(&amp;quot;ah&amp;quot;, &amp;quot;OK&amp;quot;);&lt;br /&gt;
$w-&amp;gt;text(&amp;#039;Wow, it works!&amp;#039;);&lt;br /&gt;
$w-&amp;gt;endElement();&lt;br /&gt;
echo htmlentities($w-&amp;gt;outputMemory(true));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=XML_erzeugen&amp;diff=25411</id>
		<title>XML erzeugen</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=XML_erzeugen&amp;diff=25411"/>
		<updated>2021-09-22T15:20:00Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: /* DOM Object Model */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Siehe auch ==&lt;br /&gt;
 [[SimpleXML]]&lt;br /&gt;
&lt;br /&gt;
== Mit dem DOM (Document Object Model) ==&lt;br /&gt;
 http://de3.php.net/manual/en/book.dom.php&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
 https://stackoverflow.com/questions/143122/using-simplexml-to-create-an-xml-object-from-scratch&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$domDoc = new DOMDocument;&lt;br /&gt;
$rootElt = $domDoc-&amp;gt;createElement(&amp;#039;root&amp;#039;); &lt;br /&gt;
$rootNode = $domDoc-&amp;gt;appendChild($rootElt);&lt;br /&gt;
&lt;br /&gt;
$subElt = $domDoc-&amp;gt;createElement(&amp;#039;foo&amp;#039;);&lt;br /&gt;
$attr = $domDoc-&amp;gt;createAttribute(&amp;#039;ah&amp;#039;);&lt;br /&gt;
$attrVal = $domDoc-&amp;gt;createTextNode(&amp;#039;OK&amp;#039;);&lt;br /&gt;
$attr-&amp;gt;appendChild($attrVal);&lt;br /&gt;
$subElt-&amp;gt;appendChild($attr);&lt;br /&gt;
$subNode = $rootNode-&amp;gt;appendChild($subElt);&lt;br /&gt;
&lt;br /&gt;
$textNode = $domDoc-&amp;gt;createTextNode(&amp;#039;Wow, it works!&amp;#039;);&lt;br /&gt;
$subNode-&amp;gt;appendChild($textNode);&lt;br /&gt;
&lt;br /&gt;
echo htmlentities($domDoc-&amp;gt;saveXML());&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mit dem DOM sind recht flexible Manipulationen möglich:&lt;br /&gt;
 $elem-&amp;gt;append($doc-&amp;gt;p(&amp;#039;This is a paragraph&amp;#039;)); &lt;br /&gt;
 $elem-&amp;gt;append(&amp;#039;Some text&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
== Mit XMLWriter ==&lt;br /&gt;
 http://de3.php.net/manual/en/intro.xmlwriter.php&lt;br /&gt;
Soll einfacher sein als mit dem DOM Object&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$w=new XMLWriter();&lt;br /&gt;
$w-&amp;gt;openMemory();&lt;br /&gt;
$w-&amp;gt;startDocument(&amp;#039;1.0&amp;#039;,&amp;#039;UTF-8&amp;#039;);&lt;br /&gt;
$w-&amp;gt;startElement(&amp;quot;root&amp;quot;);&lt;br /&gt;
$w-&amp;gt;writeAttribute(&amp;quot;ah&amp;quot;, &amp;quot;OK&amp;quot;);&lt;br /&gt;
$w-&amp;gt;text(&amp;#039;Wow, it works!&amp;#039;);&lt;br /&gt;
$w-&amp;gt;endElement();&lt;br /&gt;
echo htmlentities($w-&amp;gt;outputMemory(true));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=XML_erzeugen&amp;diff=25410</id>
		<title>XML erzeugen</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=XML_erzeugen&amp;diff=25410"/>
		<updated>2021-09-22T15:15:45Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Siehe auch ==&lt;br /&gt;
 [[SimpleXML]]&lt;br /&gt;
&lt;br /&gt;
== DOM Object Model ==&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
 https://stackoverflow.com/questions/143122/using-simplexml-to-create-an-xml-object-from-scratch&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$domDoc = new DOMDocument;&lt;br /&gt;
$rootElt = $domDoc-&amp;gt;createElement(&amp;#039;root&amp;#039;); &lt;br /&gt;
$rootNode = $domDoc-&amp;gt;appendChild($rootElt);&lt;br /&gt;
&lt;br /&gt;
$subElt = $domDoc-&amp;gt;createElement(&amp;#039;foo&amp;#039;);&lt;br /&gt;
$attr = $domDoc-&amp;gt;createAttribute(&amp;#039;ah&amp;#039;);&lt;br /&gt;
$attrVal = $domDoc-&amp;gt;createTextNode(&amp;#039;OK&amp;#039;);&lt;br /&gt;
$attr-&amp;gt;appendChild($attrVal);&lt;br /&gt;
$subElt-&amp;gt;appendChild($attr);&lt;br /&gt;
$subNode = $rootNode-&amp;gt;appendChild($subElt);&lt;br /&gt;
&lt;br /&gt;
$textNode = $domDoc-&amp;gt;createTextNode(&amp;#039;Wow, it works!&amp;#039;);&lt;br /&gt;
$subNode-&amp;gt;appendChild($textNode);&lt;br /&gt;
&lt;br /&gt;
echo htmlentities($domDoc-&amp;gt;saveXML());&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mit dem DOM Objekt Model sind recht einfache Manipulationen möglich:&lt;br /&gt;
 $elem-&amp;gt;append($doc-&amp;gt;p(&amp;#039;This is a paragraph&amp;#039;)); &lt;br /&gt;
 $elem-&amp;gt;append(&amp;#039;Some text&amp;#039;);&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=SimpleXML&amp;diff=25409</id>
		<title>SimpleXML</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=SimpleXML&amp;diff=25409"/>
		<updated>2021-09-22T15:11:50Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: /* Beispiele */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Simple XML ist eine PHP Schnittstelle zum Parsen von XML Dateien.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
SimpleXML ist gut zum Parsen, aber zum Schreiben von XML gibt es bessere Möglichkeiten&lt;br /&gt;
 [[XML erzeugen]]&lt;br /&gt;
== Einführung ==&lt;br /&gt;
== Generelles vorgehen ==&lt;br /&gt;
* Einlesen der Daten (z.B. XML-Datei, oder String) in ein &amp;#039;&amp;#039;&amp;#039;SimpleXML Objekt&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;xpath Query&amp;#039;&amp;#039;&amp;#039; auf das Objekt anwenden (&amp;#039;&amp;#039;&amp;#039;$result= $sxe-&amp;gt;xpath(&amp;quot;Pfadangabe&amp;quot;)&amp;#039;&amp;#039;&amp;#039;. Man erhält ein &amp;#039;&amp;#039;&amp;#039;Array mit SimpleXML Objekten&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Zugriff auf Werte und Attribute der simpleXML Objekte. Oft werden Sie dazu mit foreach in weitere Arrays eingelesen.&lt;br /&gt;
&lt;br /&gt;
== SimpleXML 101 - Empfehlungen zur Arbeit mit simpleXML==&lt;br /&gt;
Quelle: http://stackoverflow.com/questions/1893024/basic-simplexml-working-example Zugriff 7/2013&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;programme&amp;gt; &lt;br /&gt;
  &amp;lt;title&amp;gt;Billy Bushwaka&amp;lt;/title&amp;gt; &lt;br /&gt;
  &amp;lt;episodeNumber&amp;gt;2&amp;lt;/episodeNumber&amp;gt; &lt;br /&gt;
  &amp;lt;description&amp;gt;Billy Bushwaka entertains&amp;lt;/description&amp;gt; &lt;br /&gt;
  &amp;lt;url&amp;gt;play.swf&amp;lt;/url&amp;gt; &lt;br /&gt;
&amp;lt;/programme&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First of all, always &amp;#039;&amp;#039;&amp;#039;name your PHP variables after the node they represent&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
 // the root node is ie &amp;lt;programme/&amp;gt;&lt;br /&gt;
 $programme = simplexml_load_file(&amp;quot;local.xml&amp;quot;);&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Access to children&amp;#039;&amp;#039;&amp;#039; (nodes) as if they were object properties.&lt;br /&gt;
&lt;br /&gt;
 echo $programme-&amp;gt;title;&lt;br /&gt;
If there are &amp;#039;&amp;#039;&amp;#039;multiple children&amp;#039;&amp;#039;&amp;#039; using the same name, you can &amp;#039;&amp;#039;&amp;#039;specify their 0-based position&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 // first &amp;lt;title/&amp;gt; child&lt;br /&gt;
 echo $programme-&amp;gt;title[0];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 // create or change the value of the second &amp;lt;title/&amp;gt; child&lt;br /&gt;
 $programme-&amp;gt;title[1] = &amp;#039;Second title&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Access to attributes&amp;#039;&amp;#039;&amp;#039; as if they were array keys&lt;br /&gt;
&lt;br /&gt;
 // &amp;lt;mynode attr=&amp;quot;attribute value&amp;quot; /&amp;gt;&lt;br /&gt;
 echo $mynode[&amp;#039;attr&amp;#039;];&lt;br /&gt;
Manchmal muß man Casten (andere Möglichkeiten s.u.)&lt;br /&gt;
 $myVal = (string)$mynode[&amp;#039;attr&amp;#039;];&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;XPath&amp;#039;&amp;#039;&amp;#039; always returns an array.&lt;br /&gt;
&lt;br /&gt;
=== More Hints ===&lt;br /&gt;
Quick XML&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$string = &amp;lt;&amp;lt;&amp;lt;XML&lt;br /&gt;
&amp;lt;a&amp;gt;&lt;br /&gt;
 &amp;lt;foo name=&amp;quot;one&amp;quot; game=&amp;quot;lonely&amp;quot;&amp;gt;1&amp;lt;/foo&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
XML;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative xpath:&lt;br /&gt;
&lt;br /&gt;
 $result = $xml-&amp;gt;xpath(&amp;quot;//programme/title&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
=== Quellcode der xml Datei ausgeben ===&lt;br /&gt;
 echo $simplexml-&amp;gt;asXML();&lt;br /&gt;
&lt;br /&gt;
== Snippets ==&lt;br /&gt;
=== XML-Datei von URL holen und in SimpleXML Objekt speichern===&lt;br /&gt;
==== XML Daten von URL holen mit file_get_contents ====&lt;br /&gt;
Hier wird erst nach dem Laden konvertiert.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$url = &amp;quot;http://username:password@url.com&amp;quot;;&lt;br /&gt;
$xml = file_get_contents($url);&lt;br /&gt;
$data = new SimpleXMLElement($xml);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== XML Daten mit simplexml_load_file ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//einfache Variante&lt;br /&gt;
	function fetch_xml_data($url){&lt;br /&gt;
		$simplexml=simplexml_load_file(rawurlencode(&amp;quot;https://&amp;quot;.$this-&amp;gt;user.&amp;quot;:&amp;quot;.$this-&amp;gt;pw.&amp;#039;@&amp;#039;.$url));&lt;br /&gt;
		$simplexml=simplexml_load_file(&amp;quot;test.xml&amp;quot;);&lt;br /&gt;
		return $simplexml;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Manchmal erwartet der Server weitere Header. Dann muß man die Datei auf eine andere Weise mit Context laden (siehe Beispiel Mobile.de und Snippets)&lt;br /&gt;
&lt;br /&gt;
==== Zusätzliche Header mit Stream Context senden ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	// Variante - Einlesen mit Context um diverse Header mit zu schicken&lt;br /&gt;
	function fetch_xml_data_ctx($url){&lt;br /&gt;
		// Erzeugen eines Streams&lt;br /&gt;
		$headers = &amp;quot;Accept-language: de\r\n&amp;quot;;&lt;br /&gt;
		$headers .= &amp;quot;Accept: application/xml\r\n&amp;quot;;&lt;br /&gt;
		$headers .= &amp;quot;Authorization: Basic &amp;quot;.base64_encode(&amp;quot;$this-&amp;gt;user:$this-&amp;gt;pw&amp;quot;).&amp;quot;\r\n&amp;quot;;&lt;br /&gt;
		$opts = array(&lt;br /&gt;
  			&amp;#039;http&amp;#039;=&amp;gt;array(&lt;br /&gt;
    			&amp;#039;method&amp;#039;=&amp;gt;&amp;quot;GET&amp;quot;,&lt;br /&gt;
    			&amp;#039;header&amp;#039;=&amp;gt; $headers&lt;br /&gt;
              &lt;br /&gt;
  			)&lt;br /&gt;
		);&lt;br /&gt;
		$context = stream_context_create($opts);&lt;br /&gt;
		// Öffnen der Datei mit den oben definierten HTTP-Headern&lt;br /&gt;
		$file = file_get_contents(&amp;#039;https://&amp;#039;.$url, false, $context);&lt;br /&gt;
		$simplexml=simplexml_load_string($file);&lt;br /&gt;
		//print_r($file);&lt;br /&gt;
&lt;br /&gt;
		return $simplexml;&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Zugriff auf Werte ===&lt;br /&gt;
Achtung: Wenn man die Werte über echo ausgibt wandelt sie PHP automatisch um damit sie angezeigt werden. Speichert man Sie hat man nur ein SimpleXMLObjekt um den Wert zu bekommen muß man es Casten.&lt;br /&gt;
&lt;br /&gt;
==== Suche über xPath ====&lt;br /&gt;
xPath kann man als Suchpfad über die XML Hierarchie sehen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$string = &amp;lt;&amp;lt;&amp;lt;XML&lt;br /&gt;
&amp;lt;a&amp;gt;&lt;br /&gt;
    &amp;lt;b&amp;gt;&lt;br /&gt;
        &amp;lt;c&amp;gt;text&amp;lt;/c&amp;gt;&lt;br /&gt;
        &amp;lt;c&amp;gt;stuff&amp;lt;/c&amp;gt;&lt;br /&gt;
    &amp;lt;/b&amp;gt;&lt;br /&gt;
    &amp;lt;d&amp;gt;&lt;br /&gt;
        &amp;lt;c&amp;gt;code&amp;lt;/c&amp;gt;&lt;br /&gt;
    &amp;lt;/d&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
XML;&lt;br /&gt;
&lt;br /&gt;
$xml = new SimpleXMLElement($string);&lt;br /&gt;
&lt;br /&gt;
/* Search for &amp;lt;a&amp;gt;&amp;lt;b&amp;gt;&amp;lt;c&amp;gt; */&lt;br /&gt;
$result = $xml-&amp;gt;xpath(&amp;#039;/a/b/c&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
while(list( , $node) = each($result)) {&lt;br /&gt;
    echo &amp;#039;/a/b/c: &amp;#039;,$node,&amp;quot;\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Relative paths also work... */&lt;br /&gt;
$result = $xml-&amp;gt;xpath(&amp;#039;b/c&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
while(list( , $node) = each($result)) {&lt;br /&gt;
    echo &amp;#039;b/c: &amp;#039;,$node,&amp;quot;\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/a/b/c: text&lt;br /&gt;
/a/b/c: stuff&lt;br /&gt;
b/c: text&lt;br /&gt;
b/c: stuff&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zugriff auf Attribute ===&lt;br /&gt;
====Beispiel 1====&lt;br /&gt;
&lt;br /&gt;
Man lädt mittels foreach alle Attribute des SimpleXML Objektes in ein Array und greift dann darüber zu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
foreach( $sxe-&amp;gt;attributes() as $attr_name =&amp;gt; $attr_value ){&lt;br /&gt;
	$arr[&amp;#039;attributes&amp;#039;][(string)$attr_name] = (string)$attr_value;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hinweis: Damit der Wert des Attributes als String ausgegeben wird muß man Casten (string) ansonsten wird ein Objekt zurück gegeben.&lt;br /&gt;
&lt;br /&gt;
==== Beispiel 2 ====&lt;br /&gt;
&lt;br /&gt;
Schneller Zugriff auf ein Attribut (Quelle php.net)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$att = &amp;#039;attribueName&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
// Zugriff :&lt;br /&gt;
$attribute = $element-&amp;gt;attributes()-&amp;gt;$att;&lt;br /&gt;
&lt;br /&gt;
// Casting als String liefert den Wert (ansonsten das Objekt)&lt;br /&gt;
$attribute = (string)$element-&amp;gt;attributes()-&amp;gt;$att;&lt;br /&gt;
&lt;br /&gt;
// Auch verändern des Wertes ist möglich :&lt;br /&gt;
$element-&amp;gt;attributes()-&amp;gt;$att = &amp;#039;New value of the attribute&amp;#039;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiel 3 ====&lt;br /&gt;
Schneller Zugriff mit Hilfsfunktion (Quelle: php.net)&lt;br /&gt;
&lt;br /&gt;
SimpleXMLElement Object&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(&lt;br /&gt;
    [@attributes] =&amp;gt; Array&lt;br /&gt;
        (&lt;br /&gt;
            [id] =&amp;gt; 55555&lt;br /&gt;
        )&lt;br /&gt;
&lt;br /&gt;
    [text] =&amp;gt; &amp;quot;hello world&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Funktion:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function xml_attribute($object, $attribute)&lt;br /&gt;
{&lt;br /&gt;
    if(isset($object[$attribute]))&lt;br /&gt;
        return (string) $object[$attribute];&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nutzung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
print xml_attribute($xml, &amp;#039;id&amp;#039;); //prints &amp;quot;55555&amp;quot;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiel 4 ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ein Ergebnis aus xPath ist ein Array von $sxe Objekten&amp;#039;&amp;#039;&amp;#039; und kann z.B. so aussehen (aus mobile.de mit var_dump ausgegeben):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
array(1) {&lt;br /&gt;
  [0]=&amp;gt;&lt;br /&gt;
  object(SimpleXMLElement)#3 (1) {&lt;br /&gt;
    [&amp;quot;@attributes&amp;quot;]=&amp;gt;&lt;br /&gt;
    array(4) {&lt;br /&gt;
      [&amp;quot;total&amp;quot;]=&amp;gt;&lt;br /&gt;
      string(2) &amp;quot;85&amp;quot;&lt;br /&gt;
      [&amp;quot;page-size&amp;quot;]=&amp;gt;&lt;br /&gt;
      string(2) &amp;quot;50&amp;quot;&lt;br /&gt;
      [&amp;quot;current-page&amp;quot;]=&amp;gt;&lt;br /&gt;
      string(1) &amp;quot;1&amp;quot;&lt;br /&gt;
      [&amp;quot;max-pages&amp;quot;]=&amp;gt;&lt;br /&gt;
      string(1) &amp;quot;2&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Darauf ist auch ein direkter Zugriff möglich:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	private function parseResultInfo($sxe){&lt;br /&gt;
		$arrInfo = array();&lt;br /&gt;
		$xpath=&amp;#039;//search:result&amp;#039;; // this works only if you have used the register_namespaces function in the snippets, otherwise you have to register xmlns:search=&amp;quot;http://services.mobile.de/schema/search&amp;quot;&lt;br /&gt;
		$result = $sxe-&amp;gt;xpath($xpath);&lt;br /&gt;
		//var_dump($result);&lt;br /&gt;
		$arrInfo[&amp;#039;total&amp;#039;] = (int)$result[0][&amp;#039;total&amp;#039;][0];&lt;br /&gt;
		$arrInfo[&amp;#039;page-size&amp;#039;] = (int)$result[0][&amp;#039;page-size&amp;#039;][0];&lt;br /&gt;
		$arrInfo[&amp;#039;current-page&amp;#039;] = (int)$result[0][&amp;#039;current-page&amp;#039;][0];&lt;br /&gt;
		$arrInfo[&amp;#039;max-pages&amp;#039;] = (int)$result[0][&amp;#039;max-pages&amp;#039;][0];&lt;br /&gt;
		//print_r($arrInfo);&lt;br /&gt;
		return $arrInfo;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kindknoten abfragen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$children = $sxe-&amp;gt;children($ns,TRUE);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
$ns ist der Namespace, der zweite Parameter sagt ob rekursiv gesucht wird.&lt;br /&gt;
&lt;br /&gt;
== SimpleXML und Namespaces ==&lt;br /&gt;
&lt;br /&gt;
=== Einfache Beispiele: ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;root xmlns:event=&amp;quot;http://www.webex.com/schemas/2002/06/service/event&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;event:event&amp;gt;&lt;br /&gt;
        &amp;lt;event:sessionKey&amp;gt;&amp;lt;/event:sessionKey&amp;gt;&lt;br /&gt;
        &amp;lt;event:sessionName&amp;gt;Learn QB in Minutes&amp;lt;/event:sessionName&amp;gt;&lt;br /&gt;
        &amp;lt;event:sessionType&amp;gt;9&amp;lt;/event:sessionType&amp;gt;&lt;br /&gt;
        &amp;lt;event:hostWebExID&amp;gt;&amp;lt;/event:hostWebExID&amp;gt;&lt;br /&gt;
        &amp;lt;event:startDate&amp;gt;02/12/2009&amp;lt;/event:startDate&amp;gt;&lt;br /&gt;
        &amp;lt;event:endDate&amp;gt;02/12/2009&amp;lt;/event:endDate&amp;gt;&lt;br /&gt;
        &amp;lt;event:timeZoneID&amp;gt;11&amp;lt;/event:timeZoneID&amp;gt;&lt;br /&gt;
        &amp;lt;event:duration&amp;gt;30&amp;lt;/event:duration&amp;gt;&lt;br /&gt;
        &amp;lt;event:description&amp;gt;&amp;lt;/event:description&amp;gt;&lt;br /&gt;
        &amp;lt;event:status&amp;gt;NOT_INPROGRESS&amp;lt;/event:status&amp;gt;&lt;br /&gt;
        &amp;lt;event:panelists&amp;gt;&amp;lt;/event:panelists&amp;gt;&lt;br /&gt;
        &amp;lt;event:listStatus&amp;gt;PUBLIC&amp;lt;/event:listStatus&amp;gt;&lt;br /&gt;
    &amp;lt;/event:event&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/root&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== Zugriff ohne Registrierung des Namespace ====&lt;br /&gt;
Dies setzt voraus, daß man sicher ist daß das xml immer den gleichen prefix verwendet.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$xml = new SimpleXMLElement($r);&lt;br /&gt;
&lt;br /&gt;
foreach($xml-&amp;gt;xpath(&amp;#039;//event:event&amp;#039;) as $event) {&lt;br /&gt;
 var_export($event-&amp;gt;xpath(&amp;#039;event:sessionKey&amp;#039;));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== Mit Registrierung der Namespaces ====&lt;br /&gt;
&lt;br /&gt;
You have to register the namespace for each simpleXMLElement object you use.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$xml = new SimpleXMLElement($r);&lt;br /&gt;
$xml-&amp;gt;registerXPathNamespace(&amp;#039;e&amp;#039;, &amp;#039;http://www.webex.com/schemas/2002/06/service/event&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
foreach($xml-&amp;gt;xpath(&amp;#039;//e:event&amp;#039;) as $event) {&lt;br /&gt;
    $event-&amp;gt;registerXPathNamespace(&amp;#039;e&amp;#039;, &amp;#039;http://www.webex.com/schemas/2002/06/service/event&amp;#039;);&lt;br /&gt;
    var_export($event-&amp;gt;xpath(&amp;#039;//e:sessionKey&amp;#039;));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The namespace should also be declared somewhere in the xml file.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;event:event xmlns:event=&amp;quot;http://www.webex.com/schemas/2002/06/service/event&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== Umgehen von Namespaces über dom_import ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$xml = new SimpleXMLElement($r);&lt;br /&gt;
$xml = dom_import_simplexml($xml);&lt;br /&gt;
$nodelist= $xml-&amp;gt;getElementsByTagName(&amp;#039;event&amp;#039;);  &lt;br /&gt;
for($i = 0; $i &amp;lt; $nodelist-&amp;gt;length; $i++) {&lt;br /&gt;
    $sessions = $nodelist-&amp;gt;item($i)-&amp;gt;getElementsByTagName(&amp;#039;sessionKey&amp;#039;);&lt;br /&gt;
    echo $sessions-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Funktion um Namespaces zu registrieren ===&lt;br /&gt;
Über eine kleine Funktion kann man sich arbeit sparen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	function register_namespaces($sxe){&lt;br /&gt;
		$arrNs = $sxe-&amp;gt;getNamespaces(true);&lt;br /&gt;
		foreach($arrNs as $prefix =&amp;gt; $ns){&lt;br /&gt;
			$sxe-&amp;gt;registerXPathNamespace($prefix, $ns);&lt;br /&gt;
                        echo($prefix.&amp;#039; = &amp;#039;.$ns);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Alle im XML Dokument angegebenen Namespaces werden geparsed und Registriert. So kann man sie in Kurzform ansprechen. (Siehe Beispiel Mobile.de)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$xml = &amp;lt;&amp;lt;&amp;lt;EOD&lt;br /&gt;
&amp;lt;book xmlns:chap=&amp;quot;http://example.org/chapter-title&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;My Book&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;chapter id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;chap:title&amp;gt;Chapter 1&amp;lt;/chap:title&amp;gt;&lt;br /&gt;
        &amp;lt;para&amp;gt;Donec velit. ...&amp;lt;/para&amp;gt;&lt;br /&gt;
    &amp;lt;/chapter&amp;gt;&lt;br /&gt;
    &amp;lt;chapter id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;chap:title&amp;gt;Chapter 2&amp;lt;/chap:title&amp;gt;&lt;br /&gt;
        &amp;lt;para&amp;gt;Lorem ipsum ...&amp;lt;/para&amp;gt;&lt;br /&gt;
    &amp;lt;/chapter&amp;gt;&lt;br /&gt;
&amp;lt;/book&amp;gt;&lt;br /&gt;
EOD;&lt;br /&gt;
&lt;br /&gt;
$sxe = new SimpleXMLElement($xml);&lt;br /&gt;
&lt;br /&gt;
// Zugriff mit Namespace Prefix&lt;br /&gt;
$sxe-&amp;gt;registerXPathNamespace(&amp;#039;c&amp;#039;, &amp;#039;http://example.org/chapter-title&amp;#039;);&lt;br /&gt;
$result = $sxe-&amp;gt;xpath(&amp;#039;//c:title&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
foreach ($result as $title) {&lt;br /&gt;
  echo $title . &amp;quot;\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Direkter Zugriff im nächsen Beispiel&lt;br /&gt;
=== Beispiel Ebay Timestamp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$response = &amp;lt;&amp;lt;&amp;lt; XMLBLOCK&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;soapenv:Envelope xmlns:soapenv=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;soapenv:Body&amp;gt;&lt;br /&gt;
      &amp;lt;GeteBayOfficialTimeResponse xmlns=&amp;quot;urn:ebay:apis:eBLBaseComponents&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;Timestamp&amp;gt;2005-10-28T01:01:04.668Z&amp;lt;/Timestamp&amp;gt;&lt;br /&gt;
        &amp;lt;Ack&amp;gt;Success&amp;lt;/Ack&amp;gt;&lt;br /&gt;
        &amp;lt;Version&amp;gt;429&amp;lt;/Version&amp;gt;&lt;br /&gt;
        &amp;lt;Build&amp;gt;e429_intl_Bundled_1949355_R1&amp;lt;/Build&amp;gt;&lt;br /&gt;
      &amp;lt;/GeteBayOfficialTimeResponse&amp;gt;&lt;br /&gt;
    &amp;lt;/soapenv:Body&amp;gt;&lt;br /&gt;
  &amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;
XMLBLOCK;&lt;br /&gt;
$xml = simplexml_load_string($response);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zugriff auf Timestamp:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;Time: &amp;quot; . &lt;br /&gt;
$xml-&amp;gt;children(&amp;#039;http://schemas.xmlsoap.org/soap/envelope/&amp;#039;)-&amp;gt;children(&amp;#039;urn:ebay:apis:eBLBaseComponents&amp;#039;)-&amp;gt;GeteBayOfficialTimeResponse-&amp;gt;Timestamp . &amp;quot;\n&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$xml-&amp;gt;children(&amp;#039;soapenv&amp;#039;, true)-&amp;gt;children()-&amp;gt;GeteBayOfficialTimeResponse-&amp;gt;Timestamp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
===Beispiel Mobile de===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
class Mobile{&lt;br /&gt;
	var $arrNs = array();&lt;br /&gt;
&lt;br /&gt;
	public function init(){&lt;br /&gt;
		$this-&amp;gt;action = &amp;quot;&amp;quot;;&lt;br /&gt;
		$this-&amp;gt;user = &amp;quot;username&amp;quot;;&lt;br /&gt;
		$this-&amp;gt;pw = &amp;quot;passwort&amp;quot;;&lt;br /&gt;
		$this-&amp;gt;customerId = &amp;quot;461731&amp;quot;;&lt;br /&gt;
		$this-&amp;gt;clientId = &amp;quot;517329&amp;quot;;&lt;br /&gt;
		$this-&amp;gt;baseUrl = &amp;quot;services.mobile.de/1.0.0/ad/search&amp;quot;;&lt;br /&gt;
		$arrResult = array(); // Contains last Result-List&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public function main(){&lt;br /&gt;
		$this-&amp;gt;init();&lt;br /&gt;
		$params = &amp;quot;?customerId=&amp;quot;.$this-&amp;gt;customerId.&amp;quot;&amp;amp;page.size=100&amp;quot;;&lt;br /&gt;
		$url = $this-&amp;gt;baseUrl.$params;&lt;br /&gt;
		&lt;br /&gt;
		$this-&amp;gt;sxe = $this-&amp;gt;fetch_xml_data_ctx($url);&lt;br /&gt;
		$this-&amp;gt;register_namespaces();&lt;br /&gt;
		$this-&amp;gt;parseXML($this-&amp;gt;sxe);&lt;br /&gt;
		//$this-&amp;gt;sxe_print_info();&lt;br /&gt;
		$this-&amp;gt;send_json($this-&amp;gt;arrResult);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
    //Parse XML and create Array&lt;br /&gt;
    private function parseXML($sxe){&lt;br /&gt;
    	$arrAds = array();&lt;br /&gt;
    	unset($this-&amp;gt;arrResult);&lt;br /&gt;
    	// ADS&lt;br /&gt;
    	$xpath=&amp;#039;//ad:ad&amp;#039;;&lt;br /&gt;
		$result = $sxe-&amp;gt;xpath($xpath);&lt;br /&gt;
		$count = 0;&lt;br /&gt;
		if(count($result) &amp;gt; 0){&lt;br /&gt;
			foreach ($result as $ad) {&lt;br /&gt;
				// AUTO Parsing&lt;br /&gt;
				$this-&amp;gt;arrResult[ad][$count] = $this-&amp;gt;sxe_to_array($ad,&amp;#039;ad&amp;#039;);&lt;br /&gt;
				&lt;br /&gt;
				// MANUAL Parsing&lt;br /&gt;
				// Images&lt;br /&gt;
				unset($arrImages);&lt;br /&gt;
				$arrRepresentation = $ad-&amp;gt;xpath(&amp;#039;ad:images/ad:image/ad:representation&amp;#039;);&lt;br /&gt;
				foreach($arrRepresentation as $representation){&lt;br /&gt;
					foreach($representation-&amp;gt;attributes() as $key=&amp;gt;$val){&lt;br /&gt;
						$arrImages[$key][]=(string)$val;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				$this-&amp;gt;arrResult[ad][$count][&amp;#039;images&amp;#039;]= $arrImages;		&lt;br /&gt;
				$count += 1;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
    }&lt;br /&gt;
	&lt;br /&gt;
    &lt;br /&gt;
    // Stores Attributes and Childs into Array&lt;br /&gt;
    private function sxe_to_array(SimpleXMLElement $sxe,$ns){&lt;br /&gt;
    	$arr = array();&lt;br /&gt;
    	// ATTRIBUTES&lt;br /&gt;
    	$count=0;&lt;br /&gt;
		foreach( $sxe-&amp;gt;attributes() as $attr_name =&amp;gt; $attr_value ){&lt;br /&gt;
			$arr[&amp;#039;attributes&amp;#039;][(string)$attr_name] = (string)$attr_value;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		// CHILDREN&lt;br /&gt;
		$children = $sxe-&amp;gt;children($ns,TRUE);&lt;br /&gt;
		$count = 0;&lt;br /&gt;
		foreach($children as $child_name=&amp;gt;$child_node){&lt;br /&gt;
			$arrChild = $this-&amp;gt;sxe_to_array($child_node,$ns);&lt;br /&gt;
			// RESSOURCE CHILD (ns resource)&lt;br /&gt;
			$resources = $this-&amp;gt;getResources($child_node);&lt;br /&gt;
			//print_r($resources);&lt;br /&gt;
			if(!empty($resources)) $arrChild[&amp;#039;resources&amp;#039;] = $resources;&lt;br /&gt;
			$arr[&amp;#039;children&amp;#039;][$count][$child_name][&amp;#039;value&amp;#039;]=(string)$child_node;&lt;br /&gt;
			$arr[&amp;#039;children&amp;#039;][$count][$child_name] = $arrChild; &lt;br /&gt;
		}&lt;br /&gt;
    	return $arr;&lt;br /&gt;
    &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private function getResources($node){&lt;br /&gt;
		//add &amp;#039;resource&amp;#039; namespace children (mobilede uses this as language descriptors)&lt;br /&gt;
		$count = 0;&lt;br /&gt;
		$ns=&amp;quot;resource&amp;quot;;&lt;br /&gt;
		$arr = array();&lt;br /&gt;
		$children = $node-&amp;gt;children($ns,TRUE);&lt;br /&gt;
		foreach($children as $resource_name=&amp;gt;$resource_node){&lt;br /&gt;
			//print_r($resource_node);&lt;br /&gt;
			$arrResource = $this-&amp;gt;sxe_to_array($resource_node,$ns);&lt;br /&gt;
			$arr[$count][$resource_name][&amp;#039;value&amp;#039;]=(string)$resource_node;&lt;br /&gt;
			//echo((string)$resource_node);&lt;br /&gt;
			//$arr[$count][$resource_name] = $arrResource; &lt;br /&gt;
			$count +=1;&lt;br /&gt;
		}&lt;br /&gt;
		return $arr;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    private function sxe_print_info(){&lt;br /&gt;
    	$sxe = $this-&amp;gt;sxe;&lt;br /&gt;
    	$namespaces = $sxe-&amp;gt;getNamespaces(true);&lt;br /&gt;
    	echo(&amp;quot;&amp;lt;br&amp;gt;##########&amp;lt;br&amp;gt;&amp;lt;strong&amp;gt;namespaces:&amp;lt;/strong&amp;gt; &amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
    	foreach($namespaces as $key=&amp;gt;$val){&lt;br /&gt;
    		//echo(&amp;quot;$key : $val&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
    	}&lt;br /&gt;
    	echo(&amp;quot;&amp;lt;br&amp;gt;Name: &amp;quot;.$sxe-&amp;gt;getName().&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
    	//Print Ads Info&lt;br /&gt;
		$xpath=&amp;#039;//ad:ad&amp;#039;;&lt;br /&gt;
		$result = $this-&amp;gt;sxe-&amp;gt;xpath($xpath);&lt;br /&gt;
		//echo(&amp;quot;Number of ads: &amp;quot;.count($result).&amp;quot;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
		$count = 0;&lt;br /&gt;
		//ADs&lt;br /&gt;
		foreach ($result as $ad) {&lt;br /&gt;
			$count += 1;&lt;br /&gt;
			echo(&amp;quot;&amp;lt;strong&amp;gt;Ad $count &amp;lt;/strong&amp;gt;&amp;lt;br&amp;gt;&amp;quot;);	&lt;br /&gt;
			$ad_children = $ad-&amp;gt;children(&amp;#039;ad&amp;#039;,TRUE);&lt;br /&gt;
			//AD 1st Gen Children&lt;br /&gt;
			if(count($ad_children) &amp;gt; 0){&lt;br /&gt;
				foreach ($ad_children as $ad_child_name=&amp;gt;$ad_child_node){&lt;br /&gt;
					echo(&amp;quot;&amp;lt;strong&amp;gt;Childname: $ad_child_name&amp;lt;/strong&amp;gt;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
					// ATTRIBUTES&lt;br /&gt;
					foreach($ad_child_node-&amp;gt;attributes() as $key=&amp;gt;$val){&lt;br /&gt;
						echo(&amp;quot;&amp;lt;strong&amp;gt;Attributes:&amp;lt;/strong&amp;gt; &amp;quot;);&lt;br /&gt;
						echo(&amp;quot;$key=$val&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
						echo(&amp;quot;&amp;lt;strong&amp;gt;Children: &amp;lt;/strong&amp;gt;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
						// Ad 2nd Gen Children&lt;br /&gt;
						foreach($ad_child_node-&amp;gt;children() as $ad_child_name=&amp;gt;$child_node){&lt;br /&gt;
							echo(&amp;quot;Name: $child_name&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			//$adurl = $ad-&amp;gt;{&amp;#039;detail-page&amp;#039;}-&amp;gt;value-&amp;gt;attributes()-&amp;gt;url;&lt;br /&gt;
			//echo(&amp;#039;&amp;lt;a href=&amp;quot;&amp;#039;.$adurl.&amp;#039;&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Link&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&amp;#039;);&lt;br /&gt;
		}&lt;br /&gt;
   	}&lt;br /&gt;
   	&lt;br /&gt;
	function register_namespaces(){&lt;br /&gt;
		$this-&amp;gt;arrNs = $this-&amp;gt;sxe-&amp;gt;getNamespaces(true);&lt;br /&gt;
		foreach($this-&amp;gt;arrNs as $prefix =&amp;gt; $ns){&lt;br /&gt;
			$this-&amp;gt;sxe-&amp;gt;registerXPathNamespace($prefix, $ns);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	function fetch_xml_data_ctx($url){&lt;br /&gt;
		// Erzeugen eines Streams&lt;br /&gt;
		$headers = &amp;quot;Accept-language: de\r\n&amp;quot;;&lt;br /&gt;
		$headers .= &amp;quot;Accept: application/xml\r\n&amp;quot;;&lt;br /&gt;
		$headers .= &amp;quot;Authorization: Basic &amp;quot;.base64_encode(&amp;quot;$this-&amp;gt;user:$this-&amp;gt;pw&amp;quot;).&amp;quot;\r\n&amp;quot;;&lt;br /&gt;
		$opts = array(&lt;br /&gt;
  			&amp;#039;http&amp;#039;=&amp;gt;array(&lt;br /&gt;
    			&amp;#039;method&amp;#039;=&amp;gt;&amp;quot;GET&amp;quot;,&lt;br /&gt;
    			&amp;#039;header&amp;#039;=&amp;gt; $headers&lt;br /&gt;
              &lt;br /&gt;
  			)&lt;br /&gt;
		);&lt;br /&gt;
		$context = stream_context_create($opts);&lt;br /&gt;
		// Öffnen der Datei mit den oben definierten HTTP-Headern&lt;br /&gt;
		$file = file_get_contents(&amp;#039;https://&amp;#039;.$url, false, $context);&lt;br /&gt;
		$simplexml=simplexml_load_string($file);&lt;br /&gt;
		//print_r($file);&lt;br /&gt;
&lt;br /&gt;
		return $simplexml;&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	function send_json($arrJSON){&lt;br /&gt;
		// Wir geben der Anfrage ein JSON Objekt-Literal zurück&lt;br /&gt;
		$ajax_return_data = json_encode($arrJSON);&lt;br /&gt;
		header(&amp;#039;Cache-Control: no-cache, must-revalidate&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Pragma: no-cache&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Content-Length: &amp;#039;.strlen($ajax_return_data));&lt;br /&gt;
		header(&amp;#039;Content-Type: application/json; charset=UTF-8&amp;#039;);&lt;br /&gt;
		echo $ajax_return_data;&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
$mobile = new Mobile();&lt;br /&gt;
$mobile-&amp;gt;main();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===XML from Scratch===&lt;br /&gt;
Zum Erzeugen von XML gibt es bessere Möglichkeiten aber es funktioniert auch mit SimpleXML:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$newsXML = new SimpleXMLElement(&amp;quot;&amp;lt;news&amp;gt;&amp;lt;/news&amp;gt;&amp;quot;);&lt;br /&gt;
$newsXML-&amp;gt;addAttribute(&amp;#039;newsPagePrefix&amp;#039;, &amp;#039;value goes here&amp;#039;);&lt;br /&gt;
$newsIntro = $newsXML-&amp;gt;addChild(&amp;#039;content&amp;#039;);&lt;br /&gt;
$newsIntro-&amp;gt;addAttribute(&amp;#039;type&amp;#039;, &amp;#039;latest&amp;#039;);&lt;br /&gt;
Header(&amp;#039;Content-type: text/xml&amp;#039;);&lt;br /&gt;
echo $newsXML-&amp;gt;asXML();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=XML_erzeugen&amp;diff=25408</id>
		<title>XML erzeugen</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=XML_erzeugen&amp;diff=25408"/>
		<updated>2021-09-22T15:10:32Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: Die Seite wurde neu angelegt: „== Siehe auch ==  SimpleXML“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Siehe auch ==&lt;br /&gt;
 [[SimpleXML]]&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=SimpleXML&amp;diff=25407</id>
		<title>SimpleXML</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=SimpleXML&amp;diff=25407"/>
		<updated>2021-09-22T15:09:10Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Simple XML ist eine PHP Schnittstelle zum Parsen von XML Dateien.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
SimpleXML ist gut zum Parsen, aber zum Schreiben von XML gibt es bessere Möglichkeiten&lt;br /&gt;
 [[XML erzeugen]]&lt;br /&gt;
== Einführung ==&lt;br /&gt;
== Generelles vorgehen ==&lt;br /&gt;
* Einlesen der Daten (z.B. XML-Datei, oder String) in ein &amp;#039;&amp;#039;&amp;#039;SimpleXML Objekt&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;xpath Query&amp;#039;&amp;#039;&amp;#039; auf das Objekt anwenden (&amp;#039;&amp;#039;&amp;#039;$result= $sxe-&amp;gt;xpath(&amp;quot;Pfadangabe&amp;quot;)&amp;#039;&amp;#039;&amp;#039;. Man erhält ein &amp;#039;&amp;#039;&amp;#039;Array mit SimpleXML Objekten&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Zugriff auf Werte und Attribute der simpleXML Objekte. Oft werden Sie dazu mit foreach in weitere Arrays eingelesen.&lt;br /&gt;
&lt;br /&gt;
== SimpleXML 101 - Empfehlungen zur Arbeit mit simpleXML==&lt;br /&gt;
Quelle: http://stackoverflow.com/questions/1893024/basic-simplexml-working-example Zugriff 7/2013&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;programme&amp;gt; &lt;br /&gt;
  &amp;lt;title&amp;gt;Billy Bushwaka&amp;lt;/title&amp;gt; &lt;br /&gt;
  &amp;lt;episodeNumber&amp;gt;2&amp;lt;/episodeNumber&amp;gt; &lt;br /&gt;
  &amp;lt;description&amp;gt;Billy Bushwaka entertains&amp;lt;/description&amp;gt; &lt;br /&gt;
  &amp;lt;url&amp;gt;play.swf&amp;lt;/url&amp;gt; &lt;br /&gt;
&amp;lt;/programme&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First of all, always &amp;#039;&amp;#039;&amp;#039;name your PHP variables after the node they represent&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
 // the root node is ie &amp;lt;programme/&amp;gt;&lt;br /&gt;
 $programme = simplexml_load_file(&amp;quot;local.xml&amp;quot;);&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Access to children&amp;#039;&amp;#039;&amp;#039; (nodes) as if they were object properties.&lt;br /&gt;
&lt;br /&gt;
 echo $programme-&amp;gt;title;&lt;br /&gt;
If there are &amp;#039;&amp;#039;&amp;#039;multiple children&amp;#039;&amp;#039;&amp;#039; using the same name, you can &amp;#039;&amp;#039;&amp;#039;specify their 0-based position&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 // first &amp;lt;title/&amp;gt; child&lt;br /&gt;
 echo $programme-&amp;gt;title[0];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 // create or change the value of the second &amp;lt;title/&amp;gt; child&lt;br /&gt;
 $programme-&amp;gt;title[1] = &amp;#039;Second title&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Access to attributes&amp;#039;&amp;#039;&amp;#039; as if they were array keys&lt;br /&gt;
&lt;br /&gt;
 // &amp;lt;mynode attr=&amp;quot;attribute value&amp;quot; /&amp;gt;&lt;br /&gt;
 echo $mynode[&amp;#039;attr&amp;#039;];&lt;br /&gt;
Manchmal muß man Casten (andere Möglichkeiten s.u.)&lt;br /&gt;
 $myVal = (string)$mynode[&amp;#039;attr&amp;#039;];&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;XPath&amp;#039;&amp;#039;&amp;#039; always returns an array.&lt;br /&gt;
&lt;br /&gt;
=== More Hints ===&lt;br /&gt;
Quick XML&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$string = &amp;lt;&amp;lt;&amp;lt;XML&lt;br /&gt;
&amp;lt;a&amp;gt;&lt;br /&gt;
 &amp;lt;foo name=&amp;quot;one&amp;quot; game=&amp;quot;lonely&amp;quot;&amp;gt;1&amp;lt;/foo&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
XML;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative xpath:&lt;br /&gt;
&lt;br /&gt;
 $result = $xml-&amp;gt;xpath(&amp;quot;//programme/title&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
=== Quellcode der xml Datei ausgeben ===&lt;br /&gt;
 echo $simplexml-&amp;gt;asXML();&lt;br /&gt;
&lt;br /&gt;
== Snippets ==&lt;br /&gt;
=== XML-Datei von URL holen und in SimpleXML Objekt speichern===&lt;br /&gt;
==== XML Daten von URL holen mit file_get_contents ====&lt;br /&gt;
Hier wird erst nach dem Laden konvertiert.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$url = &amp;quot;http://username:password@url.com&amp;quot;;&lt;br /&gt;
$xml = file_get_contents($url);&lt;br /&gt;
$data = new SimpleXMLElement($xml);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== XML Daten mit simplexml_load_file ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//einfache Variante&lt;br /&gt;
	function fetch_xml_data($url){&lt;br /&gt;
		$simplexml=simplexml_load_file(rawurlencode(&amp;quot;https://&amp;quot;.$this-&amp;gt;user.&amp;quot;:&amp;quot;.$this-&amp;gt;pw.&amp;#039;@&amp;#039;.$url));&lt;br /&gt;
		$simplexml=simplexml_load_file(&amp;quot;test.xml&amp;quot;);&lt;br /&gt;
		return $simplexml;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Manchmal erwartet der Server weitere Header. Dann muß man die Datei auf eine andere Weise mit Context laden (siehe Beispiel Mobile.de und Snippets)&lt;br /&gt;
&lt;br /&gt;
==== Zusätzliche Header mit Stream Context senden ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	// Variante - Einlesen mit Context um diverse Header mit zu schicken&lt;br /&gt;
	function fetch_xml_data_ctx($url){&lt;br /&gt;
		// Erzeugen eines Streams&lt;br /&gt;
		$headers = &amp;quot;Accept-language: de\r\n&amp;quot;;&lt;br /&gt;
		$headers .= &amp;quot;Accept: application/xml\r\n&amp;quot;;&lt;br /&gt;
		$headers .= &amp;quot;Authorization: Basic &amp;quot;.base64_encode(&amp;quot;$this-&amp;gt;user:$this-&amp;gt;pw&amp;quot;).&amp;quot;\r\n&amp;quot;;&lt;br /&gt;
		$opts = array(&lt;br /&gt;
  			&amp;#039;http&amp;#039;=&amp;gt;array(&lt;br /&gt;
    			&amp;#039;method&amp;#039;=&amp;gt;&amp;quot;GET&amp;quot;,&lt;br /&gt;
    			&amp;#039;header&amp;#039;=&amp;gt; $headers&lt;br /&gt;
              &lt;br /&gt;
  			)&lt;br /&gt;
		);&lt;br /&gt;
		$context = stream_context_create($opts);&lt;br /&gt;
		// Öffnen der Datei mit den oben definierten HTTP-Headern&lt;br /&gt;
		$file = file_get_contents(&amp;#039;https://&amp;#039;.$url, false, $context);&lt;br /&gt;
		$simplexml=simplexml_load_string($file);&lt;br /&gt;
		//print_r($file);&lt;br /&gt;
&lt;br /&gt;
		return $simplexml;&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Zugriff auf Werte ===&lt;br /&gt;
Achtung: Wenn man die Werte über echo ausgibt wandelt sie PHP automatisch um damit sie angezeigt werden. Speichert man Sie hat man nur ein SimpleXMLObjekt um den Wert zu bekommen muß man es Casten.&lt;br /&gt;
&lt;br /&gt;
==== Suche über xPath ====&lt;br /&gt;
xPath kann man als Suchpfad über die XML Hierarchie sehen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$string = &amp;lt;&amp;lt;&amp;lt;XML&lt;br /&gt;
&amp;lt;a&amp;gt;&lt;br /&gt;
    &amp;lt;b&amp;gt;&lt;br /&gt;
        &amp;lt;c&amp;gt;text&amp;lt;/c&amp;gt;&lt;br /&gt;
        &amp;lt;c&amp;gt;stuff&amp;lt;/c&amp;gt;&lt;br /&gt;
    &amp;lt;/b&amp;gt;&lt;br /&gt;
    &amp;lt;d&amp;gt;&lt;br /&gt;
        &amp;lt;c&amp;gt;code&amp;lt;/c&amp;gt;&lt;br /&gt;
    &amp;lt;/d&amp;gt;&lt;br /&gt;
&amp;lt;/a&amp;gt;&lt;br /&gt;
XML;&lt;br /&gt;
&lt;br /&gt;
$xml = new SimpleXMLElement($string);&lt;br /&gt;
&lt;br /&gt;
/* Search for &amp;lt;a&amp;gt;&amp;lt;b&amp;gt;&amp;lt;c&amp;gt; */&lt;br /&gt;
$result = $xml-&amp;gt;xpath(&amp;#039;/a/b/c&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
while(list( , $node) = each($result)) {&lt;br /&gt;
    echo &amp;#039;/a/b/c: &amp;#039;,$node,&amp;quot;\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Relative paths also work... */&lt;br /&gt;
$result = $xml-&amp;gt;xpath(&amp;#039;b/c&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
while(list( , $node) = each($result)) {&lt;br /&gt;
    echo &amp;#039;b/c: &amp;#039;,$node,&amp;quot;\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/a/b/c: text&lt;br /&gt;
/a/b/c: stuff&lt;br /&gt;
b/c: text&lt;br /&gt;
b/c: stuff&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zugriff auf Attribute ===&lt;br /&gt;
====Beispiel 1====&lt;br /&gt;
&lt;br /&gt;
Man lädt mittels foreach alle Attribute des SimpleXML Objektes in ein Array und greift dann darüber zu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
foreach( $sxe-&amp;gt;attributes() as $attr_name =&amp;gt; $attr_value ){&lt;br /&gt;
	$arr[&amp;#039;attributes&amp;#039;][(string)$attr_name] = (string)$attr_value;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hinweis: Damit der Wert des Attributes als String ausgegeben wird muß man Casten (string) ansonsten wird ein Objekt zurück gegeben.&lt;br /&gt;
&lt;br /&gt;
==== Beispiel 2 ====&lt;br /&gt;
&lt;br /&gt;
Schneller Zugriff auf ein Attribut (Quelle php.net)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$att = &amp;#039;attribueName&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
// Zugriff :&lt;br /&gt;
$attribute = $element-&amp;gt;attributes()-&amp;gt;$att;&lt;br /&gt;
&lt;br /&gt;
// Casting als String liefert den Wert (ansonsten das Objekt)&lt;br /&gt;
$attribute = (string)$element-&amp;gt;attributes()-&amp;gt;$att;&lt;br /&gt;
&lt;br /&gt;
// Auch verändern des Wertes ist möglich :&lt;br /&gt;
$element-&amp;gt;attributes()-&amp;gt;$att = &amp;#039;New value of the attribute&amp;#039;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiel 3 ====&lt;br /&gt;
Schneller Zugriff mit Hilfsfunktion (Quelle: php.net)&lt;br /&gt;
&lt;br /&gt;
SimpleXMLElement Object&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(&lt;br /&gt;
    [@attributes] =&amp;gt; Array&lt;br /&gt;
        (&lt;br /&gt;
            [id] =&amp;gt; 55555&lt;br /&gt;
        )&lt;br /&gt;
&lt;br /&gt;
    [text] =&amp;gt; &amp;quot;hello world&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Funktion:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function xml_attribute($object, $attribute)&lt;br /&gt;
{&lt;br /&gt;
    if(isset($object[$attribute]))&lt;br /&gt;
        return (string) $object[$attribute];&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nutzung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
print xml_attribute($xml, &amp;#039;id&amp;#039;); //prints &amp;quot;55555&amp;quot;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispiel 4 ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ein Ergebnis aus xPath ist ein Array von $sxe Objekten&amp;#039;&amp;#039;&amp;#039; und kann z.B. so aussehen (aus mobile.de mit var_dump ausgegeben):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
array(1) {&lt;br /&gt;
  [0]=&amp;gt;&lt;br /&gt;
  object(SimpleXMLElement)#3 (1) {&lt;br /&gt;
    [&amp;quot;@attributes&amp;quot;]=&amp;gt;&lt;br /&gt;
    array(4) {&lt;br /&gt;
      [&amp;quot;total&amp;quot;]=&amp;gt;&lt;br /&gt;
      string(2) &amp;quot;85&amp;quot;&lt;br /&gt;
      [&amp;quot;page-size&amp;quot;]=&amp;gt;&lt;br /&gt;
      string(2) &amp;quot;50&amp;quot;&lt;br /&gt;
      [&amp;quot;current-page&amp;quot;]=&amp;gt;&lt;br /&gt;
      string(1) &amp;quot;1&amp;quot;&lt;br /&gt;
      [&amp;quot;max-pages&amp;quot;]=&amp;gt;&lt;br /&gt;
      string(1) &amp;quot;2&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Darauf ist auch ein direkter Zugriff möglich:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	private function parseResultInfo($sxe){&lt;br /&gt;
		$arrInfo = array();&lt;br /&gt;
		$xpath=&amp;#039;//search:result&amp;#039;; // this works only if you have used the register_namespaces function in the snippets, otherwise you have to register xmlns:search=&amp;quot;http://services.mobile.de/schema/search&amp;quot;&lt;br /&gt;
		$result = $sxe-&amp;gt;xpath($xpath);&lt;br /&gt;
		//var_dump($result);&lt;br /&gt;
		$arrInfo[&amp;#039;total&amp;#039;] = (int)$result[0][&amp;#039;total&amp;#039;][0];&lt;br /&gt;
		$arrInfo[&amp;#039;page-size&amp;#039;] = (int)$result[0][&amp;#039;page-size&amp;#039;][0];&lt;br /&gt;
		$arrInfo[&amp;#039;current-page&amp;#039;] = (int)$result[0][&amp;#039;current-page&amp;#039;][0];&lt;br /&gt;
		$arrInfo[&amp;#039;max-pages&amp;#039;] = (int)$result[0][&amp;#039;max-pages&amp;#039;][0];&lt;br /&gt;
		//print_r($arrInfo);&lt;br /&gt;
		return $arrInfo;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kindknoten abfragen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$children = $sxe-&amp;gt;children($ns,TRUE);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
$ns ist der Namespace, der zweite Parameter sagt ob rekursiv gesucht wird.&lt;br /&gt;
&lt;br /&gt;
== SimpleXML und Namespaces ==&lt;br /&gt;
&lt;br /&gt;
=== Einfache Beispiele: ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;root xmlns:event=&amp;quot;http://www.webex.com/schemas/2002/06/service/event&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;event:event&amp;gt;&lt;br /&gt;
        &amp;lt;event:sessionKey&amp;gt;&amp;lt;/event:sessionKey&amp;gt;&lt;br /&gt;
        &amp;lt;event:sessionName&amp;gt;Learn QB in Minutes&amp;lt;/event:sessionName&amp;gt;&lt;br /&gt;
        &amp;lt;event:sessionType&amp;gt;9&amp;lt;/event:sessionType&amp;gt;&lt;br /&gt;
        &amp;lt;event:hostWebExID&amp;gt;&amp;lt;/event:hostWebExID&amp;gt;&lt;br /&gt;
        &amp;lt;event:startDate&amp;gt;02/12/2009&amp;lt;/event:startDate&amp;gt;&lt;br /&gt;
        &amp;lt;event:endDate&amp;gt;02/12/2009&amp;lt;/event:endDate&amp;gt;&lt;br /&gt;
        &amp;lt;event:timeZoneID&amp;gt;11&amp;lt;/event:timeZoneID&amp;gt;&lt;br /&gt;
        &amp;lt;event:duration&amp;gt;30&amp;lt;/event:duration&amp;gt;&lt;br /&gt;
        &amp;lt;event:description&amp;gt;&amp;lt;/event:description&amp;gt;&lt;br /&gt;
        &amp;lt;event:status&amp;gt;NOT_INPROGRESS&amp;lt;/event:status&amp;gt;&lt;br /&gt;
        &amp;lt;event:panelists&amp;gt;&amp;lt;/event:panelists&amp;gt;&lt;br /&gt;
        &amp;lt;event:listStatus&amp;gt;PUBLIC&amp;lt;/event:listStatus&amp;gt;&lt;br /&gt;
    &amp;lt;/event:event&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/root&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== Zugriff ohne Registrierung des Namespace ====&lt;br /&gt;
Dies setzt voraus, daß man sicher ist daß das xml immer den gleichen prefix verwendet.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$xml = new SimpleXMLElement($r);&lt;br /&gt;
&lt;br /&gt;
foreach($xml-&amp;gt;xpath(&amp;#039;//event:event&amp;#039;) as $event) {&lt;br /&gt;
 var_export($event-&amp;gt;xpath(&amp;#039;event:sessionKey&amp;#039;));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== Mit Registrierung der Namespaces ====&lt;br /&gt;
&lt;br /&gt;
You have to register the namespace for each simpleXMLElement object you use.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$xml = new SimpleXMLElement($r);&lt;br /&gt;
$xml-&amp;gt;registerXPathNamespace(&amp;#039;e&amp;#039;, &amp;#039;http://www.webex.com/schemas/2002/06/service/event&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
foreach($xml-&amp;gt;xpath(&amp;#039;//e:event&amp;#039;) as $event) {&lt;br /&gt;
    $event-&amp;gt;registerXPathNamespace(&amp;#039;e&amp;#039;, &amp;#039;http://www.webex.com/schemas/2002/06/service/event&amp;#039;);&lt;br /&gt;
    var_export($event-&amp;gt;xpath(&amp;#039;//e:sessionKey&amp;#039;));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The namespace should also be declared somewhere in the xml file.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;event:event xmlns:event=&amp;quot;http://www.webex.com/schemas/2002/06/service/event&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== Umgehen von Namespaces über dom_import ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$xml = new SimpleXMLElement($r);&lt;br /&gt;
$xml = dom_import_simplexml($xml);&lt;br /&gt;
$nodelist= $xml-&amp;gt;getElementsByTagName(&amp;#039;event&amp;#039;);  &lt;br /&gt;
for($i = 0; $i &amp;lt; $nodelist-&amp;gt;length; $i++) {&lt;br /&gt;
    $sessions = $nodelist-&amp;gt;item($i)-&amp;gt;getElementsByTagName(&amp;#039;sessionKey&amp;#039;);&lt;br /&gt;
    echo $sessions-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Funktion um Namespaces zu registrieren ===&lt;br /&gt;
Über eine kleine Funktion kann man sich arbeit sparen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	function register_namespaces($sxe){&lt;br /&gt;
		$arrNs = $sxe-&amp;gt;getNamespaces(true);&lt;br /&gt;
		foreach($arrNs as $prefix =&amp;gt; $ns){&lt;br /&gt;
			$sxe-&amp;gt;registerXPathNamespace($prefix, $ns);&lt;br /&gt;
                        echo($prefix.&amp;#039; = &amp;#039;.$ns);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Alle im XML Dokument angegebenen Namespaces werden geparsed und Registriert. So kann man sie in Kurzform ansprechen. (Siehe Beispiel Mobile.de)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$xml = &amp;lt;&amp;lt;&amp;lt;EOD&lt;br /&gt;
&amp;lt;book xmlns:chap=&amp;quot;http://example.org/chapter-title&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;My Book&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;chapter id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;chap:title&amp;gt;Chapter 1&amp;lt;/chap:title&amp;gt;&lt;br /&gt;
        &amp;lt;para&amp;gt;Donec velit. ...&amp;lt;/para&amp;gt;&lt;br /&gt;
    &amp;lt;/chapter&amp;gt;&lt;br /&gt;
    &amp;lt;chapter id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;chap:title&amp;gt;Chapter 2&amp;lt;/chap:title&amp;gt;&lt;br /&gt;
        &amp;lt;para&amp;gt;Lorem ipsum ...&amp;lt;/para&amp;gt;&lt;br /&gt;
    &amp;lt;/chapter&amp;gt;&lt;br /&gt;
&amp;lt;/book&amp;gt;&lt;br /&gt;
EOD;&lt;br /&gt;
&lt;br /&gt;
$sxe = new SimpleXMLElement($xml);&lt;br /&gt;
&lt;br /&gt;
// Zugriff mit Namespace Prefix&lt;br /&gt;
$sxe-&amp;gt;registerXPathNamespace(&amp;#039;c&amp;#039;, &amp;#039;http://example.org/chapter-title&amp;#039;);&lt;br /&gt;
$result = $sxe-&amp;gt;xpath(&amp;#039;//c:title&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
foreach ($result as $title) {&lt;br /&gt;
  echo $title . &amp;quot;\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Direkter Zugriff im nächsen Beispiel&lt;br /&gt;
=== Beispiel Ebay Timestamp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$response = &amp;lt;&amp;lt;&amp;lt; XMLBLOCK&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;soapenv:Envelope xmlns:soapenv=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;soapenv:Body&amp;gt;&lt;br /&gt;
      &amp;lt;GeteBayOfficialTimeResponse xmlns=&amp;quot;urn:ebay:apis:eBLBaseComponents&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;Timestamp&amp;gt;2005-10-28T01:01:04.668Z&amp;lt;/Timestamp&amp;gt;&lt;br /&gt;
        &amp;lt;Ack&amp;gt;Success&amp;lt;/Ack&amp;gt;&lt;br /&gt;
        &amp;lt;Version&amp;gt;429&amp;lt;/Version&amp;gt;&lt;br /&gt;
        &amp;lt;Build&amp;gt;e429_intl_Bundled_1949355_R1&amp;lt;/Build&amp;gt;&lt;br /&gt;
      &amp;lt;/GeteBayOfficialTimeResponse&amp;gt;&lt;br /&gt;
    &amp;lt;/soapenv:Body&amp;gt;&lt;br /&gt;
  &amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;
XMLBLOCK;&lt;br /&gt;
$xml = simplexml_load_string($response);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zugriff auf Timestamp:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;Time: &amp;quot; . &lt;br /&gt;
$xml-&amp;gt;children(&amp;#039;http://schemas.xmlsoap.org/soap/envelope/&amp;#039;)-&amp;gt;children(&amp;#039;urn:ebay:apis:eBLBaseComponents&amp;#039;)-&amp;gt;GeteBayOfficialTimeResponse-&amp;gt;Timestamp . &amp;quot;\n&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$xml-&amp;gt;children(&amp;#039;soapenv&amp;#039;, true)-&amp;gt;children()-&amp;gt;GeteBayOfficialTimeResponse-&amp;gt;Timestamp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
===Beispiel Mobile de===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
class Mobile{&lt;br /&gt;
	var $arrNs = array();&lt;br /&gt;
&lt;br /&gt;
	public function init(){&lt;br /&gt;
		$this-&amp;gt;action = &amp;quot;&amp;quot;;&lt;br /&gt;
		$this-&amp;gt;user = &amp;quot;username&amp;quot;;&lt;br /&gt;
		$this-&amp;gt;pw = &amp;quot;passwort&amp;quot;;&lt;br /&gt;
		$this-&amp;gt;customerId = &amp;quot;461731&amp;quot;;&lt;br /&gt;
		$this-&amp;gt;clientId = &amp;quot;517329&amp;quot;;&lt;br /&gt;
		$this-&amp;gt;baseUrl = &amp;quot;services.mobile.de/1.0.0/ad/search&amp;quot;;&lt;br /&gt;
		$arrResult = array(); // Contains last Result-List&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public function main(){&lt;br /&gt;
		$this-&amp;gt;init();&lt;br /&gt;
		$params = &amp;quot;?customerId=&amp;quot;.$this-&amp;gt;customerId.&amp;quot;&amp;amp;page.size=100&amp;quot;;&lt;br /&gt;
		$url = $this-&amp;gt;baseUrl.$params;&lt;br /&gt;
		&lt;br /&gt;
		$this-&amp;gt;sxe = $this-&amp;gt;fetch_xml_data_ctx($url);&lt;br /&gt;
		$this-&amp;gt;register_namespaces();&lt;br /&gt;
		$this-&amp;gt;parseXML($this-&amp;gt;sxe);&lt;br /&gt;
		//$this-&amp;gt;sxe_print_info();&lt;br /&gt;
		$this-&amp;gt;send_json($this-&amp;gt;arrResult);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
    //Parse XML and create Array&lt;br /&gt;
    private function parseXML($sxe){&lt;br /&gt;
    	$arrAds = array();&lt;br /&gt;
    	unset($this-&amp;gt;arrResult);&lt;br /&gt;
    	// ADS&lt;br /&gt;
    	$xpath=&amp;#039;//ad:ad&amp;#039;;&lt;br /&gt;
		$result = $sxe-&amp;gt;xpath($xpath);&lt;br /&gt;
		$count = 0;&lt;br /&gt;
		if(count($result) &amp;gt; 0){&lt;br /&gt;
			foreach ($result as $ad) {&lt;br /&gt;
				// AUTO Parsing&lt;br /&gt;
				$this-&amp;gt;arrResult[ad][$count] = $this-&amp;gt;sxe_to_array($ad,&amp;#039;ad&amp;#039;);&lt;br /&gt;
				&lt;br /&gt;
				// MANUAL Parsing&lt;br /&gt;
				// Images&lt;br /&gt;
				unset($arrImages);&lt;br /&gt;
				$arrRepresentation = $ad-&amp;gt;xpath(&amp;#039;ad:images/ad:image/ad:representation&amp;#039;);&lt;br /&gt;
				foreach($arrRepresentation as $representation){&lt;br /&gt;
					foreach($representation-&amp;gt;attributes() as $key=&amp;gt;$val){&lt;br /&gt;
						$arrImages[$key][]=(string)$val;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				$this-&amp;gt;arrResult[ad][$count][&amp;#039;images&amp;#039;]= $arrImages;		&lt;br /&gt;
				$count += 1;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
    }&lt;br /&gt;
	&lt;br /&gt;
    &lt;br /&gt;
    // Stores Attributes and Childs into Array&lt;br /&gt;
    private function sxe_to_array(SimpleXMLElement $sxe,$ns){&lt;br /&gt;
    	$arr = array();&lt;br /&gt;
    	// ATTRIBUTES&lt;br /&gt;
    	$count=0;&lt;br /&gt;
		foreach( $sxe-&amp;gt;attributes() as $attr_name =&amp;gt; $attr_value ){&lt;br /&gt;
			$arr[&amp;#039;attributes&amp;#039;][(string)$attr_name] = (string)$attr_value;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		// CHILDREN&lt;br /&gt;
		$children = $sxe-&amp;gt;children($ns,TRUE);&lt;br /&gt;
		$count = 0;&lt;br /&gt;
		foreach($children as $child_name=&amp;gt;$child_node){&lt;br /&gt;
			$arrChild = $this-&amp;gt;sxe_to_array($child_node,$ns);&lt;br /&gt;
			// RESSOURCE CHILD (ns resource)&lt;br /&gt;
			$resources = $this-&amp;gt;getResources($child_node);&lt;br /&gt;
			//print_r($resources);&lt;br /&gt;
			if(!empty($resources)) $arrChild[&amp;#039;resources&amp;#039;] = $resources;&lt;br /&gt;
			$arr[&amp;#039;children&amp;#039;][$count][$child_name][&amp;#039;value&amp;#039;]=(string)$child_node;&lt;br /&gt;
			$arr[&amp;#039;children&amp;#039;][$count][$child_name] = $arrChild; &lt;br /&gt;
		}&lt;br /&gt;
    	return $arr;&lt;br /&gt;
    &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private function getResources($node){&lt;br /&gt;
		//add &amp;#039;resource&amp;#039; namespace children (mobilede uses this as language descriptors)&lt;br /&gt;
		$count = 0;&lt;br /&gt;
		$ns=&amp;quot;resource&amp;quot;;&lt;br /&gt;
		$arr = array();&lt;br /&gt;
		$children = $node-&amp;gt;children($ns,TRUE);&lt;br /&gt;
		foreach($children as $resource_name=&amp;gt;$resource_node){&lt;br /&gt;
			//print_r($resource_node);&lt;br /&gt;
			$arrResource = $this-&amp;gt;sxe_to_array($resource_node,$ns);&lt;br /&gt;
			$arr[$count][$resource_name][&amp;#039;value&amp;#039;]=(string)$resource_node;&lt;br /&gt;
			//echo((string)$resource_node);&lt;br /&gt;
			//$arr[$count][$resource_name] = $arrResource; &lt;br /&gt;
			$count +=1;&lt;br /&gt;
		}&lt;br /&gt;
		return $arr;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    private function sxe_print_info(){&lt;br /&gt;
    	$sxe = $this-&amp;gt;sxe;&lt;br /&gt;
    	$namespaces = $sxe-&amp;gt;getNamespaces(true);&lt;br /&gt;
    	echo(&amp;quot;&amp;lt;br&amp;gt;##########&amp;lt;br&amp;gt;&amp;lt;strong&amp;gt;namespaces:&amp;lt;/strong&amp;gt; &amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
    	foreach($namespaces as $key=&amp;gt;$val){&lt;br /&gt;
    		//echo(&amp;quot;$key : $val&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
    	}&lt;br /&gt;
    	echo(&amp;quot;&amp;lt;br&amp;gt;Name: &amp;quot;.$sxe-&amp;gt;getName().&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
    	//Print Ads Info&lt;br /&gt;
		$xpath=&amp;#039;//ad:ad&amp;#039;;&lt;br /&gt;
		$result = $this-&amp;gt;sxe-&amp;gt;xpath($xpath);&lt;br /&gt;
		//echo(&amp;quot;Number of ads: &amp;quot;.count($result).&amp;quot;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
		$count = 0;&lt;br /&gt;
		//ADs&lt;br /&gt;
		foreach ($result as $ad) {&lt;br /&gt;
			$count += 1;&lt;br /&gt;
			echo(&amp;quot;&amp;lt;strong&amp;gt;Ad $count &amp;lt;/strong&amp;gt;&amp;lt;br&amp;gt;&amp;quot;);	&lt;br /&gt;
			$ad_children = $ad-&amp;gt;children(&amp;#039;ad&amp;#039;,TRUE);&lt;br /&gt;
			//AD 1st Gen Children&lt;br /&gt;
			if(count($ad_children) &amp;gt; 0){&lt;br /&gt;
				foreach ($ad_children as $ad_child_name=&amp;gt;$ad_child_node){&lt;br /&gt;
					echo(&amp;quot;&amp;lt;strong&amp;gt;Childname: $ad_child_name&amp;lt;/strong&amp;gt;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
					// ATTRIBUTES&lt;br /&gt;
					foreach($ad_child_node-&amp;gt;attributes() as $key=&amp;gt;$val){&lt;br /&gt;
						echo(&amp;quot;&amp;lt;strong&amp;gt;Attributes:&amp;lt;/strong&amp;gt; &amp;quot;);&lt;br /&gt;
						echo(&amp;quot;$key=$val&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
						echo(&amp;quot;&amp;lt;strong&amp;gt;Children: &amp;lt;/strong&amp;gt;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
						// Ad 2nd Gen Children&lt;br /&gt;
						foreach($ad_child_node-&amp;gt;children() as $ad_child_name=&amp;gt;$child_node){&lt;br /&gt;
							echo(&amp;quot;Name: $child_name&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			//$adurl = $ad-&amp;gt;{&amp;#039;detail-page&amp;#039;}-&amp;gt;value-&amp;gt;attributes()-&amp;gt;url;&lt;br /&gt;
			//echo(&amp;#039;&amp;lt;a href=&amp;quot;&amp;#039;.$adurl.&amp;#039;&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Link&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&amp;#039;);&lt;br /&gt;
		}&lt;br /&gt;
   	}&lt;br /&gt;
   	&lt;br /&gt;
	function register_namespaces(){&lt;br /&gt;
		$this-&amp;gt;arrNs = $this-&amp;gt;sxe-&amp;gt;getNamespaces(true);&lt;br /&gt;
		foreach($this-&amp;gt;arrNs as $prefix =&amp;gt; $ns){&lt;br /&gt;
			$this-&amp;gt;sxe-&amp;gt;registerXPathNamespace($prefix, $ns);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	function fetch_xml_data_ctx($url){&lt;br /&gt;
		// Erzeugen eines Streams&lt;br /&gt;
		$headers = &amp;quot;Accept-language: de\r\n&amp;quot;;&lt;br /&gt;
		$headers .= &amp;quot;Accept: application/xml\r\n&amp;quot;;&lt;br /&gt;
		$headers .= &amp;quot;Authorization: Basic &amp;quot;.base64_encode(&amp;quot;$this-&amp;gt;user:$this-&amp;gt;pw&amp;quot;).&amp;quot;\r\n&amp;quot;;&lt;br /&gt;
		$opts = array(&lt;br /&gt;
  			&amp;#039;http&amp;#039;=&amp;gt;array(&lt;br /&gt;
    			&amp;#039;method&amp;#039;=&amp;gt;&amp;quot;GET&amp;quot;,&lt;br /&gt;
    			&amp;#039;header&amp;#039;=&amp;gt; $headers&lt;br /&gt;
              &lt;br /&gt;
  			)&lt;br /&gt;
		);&lt;br /&gt;
		$context = stream_context_create($opts);&lt;br /&gt;
		// Öffnen der Datei mit den oben definierten HTTP-Headern&lt;br /&gt;
		$file = file_get_contents(&amp;#039;https://&amp;#039;.$url, false, $context);&lt;br /&gt;
		$simplexml=simplexml_load_string($file);&lt;br /&gt;
		//print_r($file);&lt;br /&gt;
&lt;br /&gt;
		return $simplexml;&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	function send_json($arrJSON){&lt;br /&gt;
		// Wir geben der Anfrage ein JSON Objekt-Literal zurück&lt;br /&gt;
		$ajax_return_data = json_encode($arrJSON);&lt;br /&gt;
		header(&amp;#039;Cache-Control: no-cache, must-revalidate&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Pragma: no-cache&amp;#039;);&lt;br /&gt;
		header(&amp;#039;Content-Length: &amp;#039;.strlen($ajax_return_data));&lt;br /&gt;
		header(&amp;#039;Content-Type: application/json; charset=UTF-8&amp;#039;);&lt;br /&gt;
		echo $ajax_return_data;&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
$mobile = new Mobile();&lt;br /&gt;
$mobile-&amp;gt;main();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Terminal_und_Konsole_auf_dem_Mac&amp;diff=25406</id>
		<title>Terminal und Konsole auf dem Mac</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Terminal_und_Konsole_auf_dem_Mac&amp;diff=25406"/>
		<updated>2021-09-22T10:34:52Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: /* Datei ausführbar machen und ausführen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tips für die Arbeit mit dem Terminal&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Das Terminal ist ein Fenster mit dem man verschiedene Shells starten kann. Diese wiederum könnnen verschiedenste Befehle und Skripte ausführen.&lt;br /&gt;
&lt;br /&gt;
Das Erscheinungsbild des Terminals kann man einfach Verbessern. Dazu kann man z.B. im Home-Directory die Dateien &amp;#039;&amp;#039;&amp;#039;.bash_profile&amp;#039;&amp;#039;&amp;#039; or &amp;#039;&amp;#039;&amp;#039;.bashrc&amp;#039;&amp;#039;&amp;#039; anpassen. Aber auch die &amp;#039;&amp;#039;&amp;#039;.profile&amp;#039;&amp;#039;&amp;#039; Datei Funktioniert. Je nachdem ob man die User Dateien oder die Globalen nimmt wird die Änderung global oder auf User-Ebene umgesetzt. Wenn die Dateien nicht vorhanden sind einfach hinzufügen.&lt;br /&gt;
&lt;br /&gt;
== Quickstart ==&lt;br /&gt;
=== Skripte schreiben ===&lt;br /&gt;
 https://support.apple.com/de-de/guide/terminal/apd53500956-7c5b-496b-a362-2845f2aab4bc/2.11/mac/11.0&lt;br /&gt;
=== Datei ausführbar machen und ausführen ===&lt;br /&gt;
 cd YourScriptDirectory&lt;br /&gt;
Gib den Befehl chmod ein. Zum Beispiel:&lt;br /&gt;
 chmod 755 YourScriptName.sh&lt;br /&gt;
 # oder auch&lt;br /&gt;
 chmod +x &amp;lt;fileName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nachdem du aus der Shell-Skript-Datei eine ausführbare Datei gemacht hast, kannst du diese durch Eingeben des Pfadnamens ausführen. Zum Beispiel:&lt;br /&gt;
 % ~/Documents/deinPfad/&amp;lt;fileName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
 % cd ~/DeinPfad/Dev/ &lt;br /&gt;
 % ./&amp;lt;fileName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Terminal und Konsole auf dem Mac&lt;br /&gt;
&lt;br /&gt;
=== Befehle für die Shell / Shell-Skripte ===&lt;br /&gt;
Diese liegen i.d.R. in &lt;br /&gt;
 /bin&lt;br /&gt;
 /sbin &lt;br /&gt;
 /usr/bin&lt;br /&gt;
 /usr/sbin&lt;br /&gt;
wobei sbin superuser Befehle enthält. /bin und /sbin werden früh im Bootprozess geladen und enthalen dementsprechende Befehle. Die Ordner in /usr (unix system resources) Hier findest du über 1000 Kommandos. Generell gilt alles was der Finder kann, kannst du auch mit einem Skript erreichen. Der Finder ist im Prinzip auch ein Interpreter.&lt;br /&gt;
&lt;br /&gt;
Weitere Befehle können z.b. in &lt;br /&gt;
 /usr/local/bin&lt;br /&gt;
liegen. Der ist für Befehle vorgesehen, die nicht mit dem OS ausgeliefert werden.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
=== zsh shell statt bash ab Catalina ===&lt;br /&gt;
https://support.apple.com/de-de/HT208050&lt;br /&gt;
== Prompt anpassen ==&lt;br /&gt;
Wie oben beschrieben z.B. in die .bash_profile datei&lt;br /&gt;
&amp;#039;&amp;#039;Farbiges&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;Prompt&amp;#039;&amp;#039;&amp;#039; und Anzeige als: &amp;#039;&amp;#039;“username@hostname:cwd $”&amp;#039;&amp;#039;&lt;br /&gt;
 export PS1=&amp;quot;\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ &amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Farben auf Mac Terminal ==&lt;br /&gt;
 export CLICOLOR=1&lt;br /&gt;
 export LSCOLORS=GxFxCxDxBxegedabagaced&lt;br /&gt;
&lt;br /&gt;
CLICOLOR=1 bedeutet Farbe anschalten&lt;br /&gt;
LSCOLORS= Farben für die anzeige im Listkommando&lt;br /&gt;
== Mac UNIX ==&lt;br /&gt;
Basiert auf UNIX&lt;br /&gt;
&lt;br /&gt;
Apfel &amp;gt; Über diesen Mac &amp;gt; Software (da steht z.B. die kernel Version)&lt;br /&gt;
&lt;br /&gt;
== Umgebungsvariablen, PATH Variable etc.== &lt;br /&gt;
siehe auch: http://wiki.zone30.info/wikizone/index.php/Linux_-_Umgebungsvariable&lt;br /&gt;
&lt;br /&gt;
alle kriegt man mit&lt;br /&gt;
 set | less&lt;br /&gt;
eine einzelne z.B. mit:&lt;br /&gt;
echo $PATH &lt;br /&gt;
&lt;br /&gt;
==== PATH Variable anpassen ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hinzufügen&amp;#039;&amp;#039;&amp;#039; eines Pfades für eine &amp;#039;&amp;#039;&amp;#039;einzelne&amp;#039;&amp;#039;&amp;#039; Terminal &amp;#039;&amp;#039;&amp;#039;Session&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
 PATH=MeinZusatzPfad:$PATH&lt;br /&gt;
 export PATH&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exportieren&amp;#039;&amp;#039;&amp;#039; ist wichtig wenn die neue Variable auch in &amp;#039;&amp;#039;&amp;#039;Unterterminals&amp;#039;&amp;#039;&amp;#039; zur Verfügung stehen soll (z.B. bei Bash Skripten)&lt;br /&gt;
&lt;br /&gt;
=== Dauerhaft PATH Variable in der Bash setzen ===&lt;br /&gt;
Auf diese Weise stehen die PATH Variable &amp;#039;&amp;#039;&amp;#039;bei jeder Sitzung&amp;#039;&amp;#039;&amp;#039; zur Verfügung. Mac speichert die Bash Datei im Userverzeichnis. &lt;br /&gt;
&lt;br /&gt;
Wir öffnen die bash_profile Datei im Standard Editor (wenn Sie nicht vorhanden ist wird Sie erzeugt).&lt;br /&gt;
 touch ~/.bash_profile; open ~/.bash_profile&lt;br /&gt;
Jetzt können wir die Variable setzen. Hier ein Beispiel mit der Android ADT&lt;br /&gt;
 export PATH=/Users/schlegel/Development/adt-bundle-mac-x86_64/sdk/platform-tools:/Users/schlegel/Development/adt-bundle-mac-x86_64/sdk/tools:$PATH&lt;br /&gt;
&lt;br /&gt;
Durch das :$PATH am Ende wird der neue Wert zu den Standardwerten hinzugefügt oder hier besser vorangestellt)&lt;br /&gt;
&lt;br /&gt;
Jetzt noch die Datei abspeichern und ausführen:&lt;br /&gt;
&lt;br /&gt;
 source ~/.bash_profile&lt;br /&gt;
== Umfangreiches .bash_profile Beispiel ==&lt;br /&gt;
Quelle: http://natelandau.com/my-mac-osx-bash_profile/ (2015-10)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#  ---------------------------------------------------------------------------&lt;br /&gt;
#&lt;br /&gt;
#  Description:  This file holds all my BASH configurations and aliases&lt;br /&gt;
#&lt;br /&gt;
#  Sections:&lt;br /&gt;
#  1.   Environment Configuration&lt;br /&gt;
#  2.   Make Terminal Better (remapping defaults and adding functionality)&lt;br /&gt;
#  3.   File and Folder Management&lt;br /&gt;
#  4.   Searching&lt;br /&gt;
#  5.   Process Management&lt;br /&gt;
#  6.   Networking&lt;br /&gt;
#  7.   System Operations &amp;amp; Information&lt;br /&gt;
#  8.   Web Development&lt;br /&gt;
#  9.   Reminders &amp;amp; Notes&lt;br /&gt;
#&lt;br /&gt;
#  ---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
#   1.  ENVIRONMENT CONFIGURATION&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
&lt;br /&gt;
#   Change Prompt&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export PS1=&amp;quot;________________________________________________________________________________\n| \w @ \h (\u) \n| =&amp;gt; &amp;quot;&lt;br /&gt;
    export PS2=&amp;quot;| =&amp;gt; &amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   Set Paths&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export PATH=&amp;quot;$PATH:/usr/local/bin/&amp;quot;&lt;br /&gt;
    export PATH=&amp;quot;/usr/local/git/bin:/sw/bin/:/usr/local/bin:/usr/local/:/usr/local/sbin:/usr/local/mysql/bin:$PATH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   Set Default Editor (change &amp;#039;Nano&amp;#039; to the editor of your choice)&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export EDITOR=/usr/bin/nano&lt;br /&gt;
&lt;br /&gt;
#   Set default blocksize for ls, df, du&lt;br /&gt;
#   from this: http://hints.macworld.com/comment.php?mode=view&amp;amp;cid=24491&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export BLOCKSIZE=1k&lt;br /&gt;
&lt;br /&gt;
#   Add color to terminal&lt;br /&gt;
#   (this is all commented out as I use Mac Terminal Profiles)&lt;br /&gt;
#   from http://osxdaily.com/2012/02/21/add-color-to-the-terminal-in-mac-os-x/&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
#   export CLICOLOR=1&lt;br /&gt;
#   export LSCOLORS=ExFxBxDxCxegedabagacad&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   -----------------------------&lt;br /&gt;
#   2.  MAKE TERMINAL BETTER&lt;br /&gt;
#   -----------------------------&lt;br /&gt;
&lt;br /&gt;
alias cp=&amp;#039;cp -iv&amp;#039;                           # Preferred &amp;#039;cp&amp;#039; implementation&lt;br /&gt;
alias mv=&amp;#039;mv -iv&amp;#039;                           # Preferred &amp;#039;mv&amp;#039; implementation&lt;br /&gt;
alias mkdir=&amp;#039;mkdir -pv&amp;#039;                     # Preferred &amp;#039;mkdir&amp;#039; implementation&lt;br /&gt;
alias ll=&amp;#039;ls -FGlAhp&amp;#039;                       # Preferred &amp;#039;ls&amp;#039; implementation&lt;br /&gt;
alias less=&amp;#039;less -FSRXc&amp;#039;                    # Preferred &amp;#039;less&amp;#039; implementation&lt;br /&gt;
cd() { builtin cd &amp;quot;$@&amp;quot;; ll; }               # Always list directory contents upon &amp;#039;cd&amp;#039;&lt;br /&gt;
alias cd..=&amp;#039;cd ../&amp;#039;                         # Go back 1 directory level (for fast typers)&lt;br /&gt;
alias ..=&amp;#039;cd ../&amp;#039;                           # Go back 1 directory level&lt;br /&gt;
alias ...=&amp;#039;cd ../../&amp;#039;                       # Go back 2 directory levels&lt;br /&gt;
alias .3=&amp;#039;cd ../../../&amp;#039;                     # Go back 3 directory levels&lt;br /&gt;
alias .4=&amp;#039;cd ../../../../&amp;#039;                  # Go back 4 directory levels&lt;br /&gt;
alias .5=&amp;#039;cd ../../../../../&amp;#039;               # Go back 5 directory levels&lt;br /&gt;
alias .6=&amp;#039;cd ../../../../../../&amp;#039;            # Go back 6 directory levels&lt;br /&gt;
alias edit=&amp;#039;subl&amp;#039;                           # edit:         Opens any file in sublime editor&lt;br /&gt;
alias f=&amp;#039;open -a Finder ./&amp;#039;                 # f:            Opens current directory in MacOS Finder&lt;br /&gt;
alias ~=&amp;quot;cd ~&amp;quot;                              # ~:            Go Home&lt;br /&gt;
alias c=&amp;#039;clear&amp;#039;                             # c:            Clear terminal display&lt;br /&gt;
alias which=&amp;#039;type -all&amp;#039;                     # which:        Find executables&lt;br /&gt;
alias path=&amp;#039;echo -e ${PATH//:/\\n}&amp;#039;         # path:         Echo all executable Paths&lt;br /&gt;
alias show_options=&amp;#039;shopt&amp;#039;                  # Show_options: display bash options settings&lt;br /&gt;
alias fix_stty=&amp;#039;stty sane&amp;#039;                  # fix_stty:     Restore terminal settings when screwed up&lt;br /&gt;
alias cic=&amp;#039;set completion-ignore-case On&amp;#039;   # cic:          Make tab-completion case-insensitive&lt;br /&gt;
mcd () { mkdir -p &amp;quot;$1&amp;quot; &amp;amp;&amp;amp; cd &amp;quot;$1&amp;quot;; }        # mcd:          Makes new Dir and jumps inside&lt;br /&gt;
trash () { command mv &amp;quot;$@&amp;quot; ~/.Trash ; }     # trash:        Moves a file to the MacOS trash&lt;br /&gt;
ql () { qlmanage -p &amp;quot;$*&amp;quot; &amp;gt;&amp;amp; /dev/null; }    # ql:           Opens any file in MacOS Quicklook Preview&lt;br /&gt;
alias DT=&amp;#039;tee ~/Desktop/terminalOut.txt&amp;#039;    # DT:           Pipe content to file on MacOS Desktop&lt;br /&gt;
&lt;br /&gt;
#   lr:  Full Recursive Directory Listing&lt;br /&gt;
#   ------------------------------------------&lt;br /&gt;
alias lr=&amp;#039;ls -R | grep &amp;quot;:$&amp;quot; | sed -e &amp;#039;\&amp;#039;&amp;#039;s/:$//&amp;#039;\&amp;#039;&amp;#039; -e &amp;#039;\&amp;#039;&amp;#039;s/[^-][^\/]*\//--/g&amp;#039;\&amp;#039;&amp;#039; -e &amp;#039;\&amp;#039;&amp;#039;s/^/   /&amp;#039;\&amp;#039;&amp;#039; -e &amp;#039;\&amp;#039;&amp;#039;s/-/|/&amp;#039;\&amp;#039;&amp;#039; | less&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   mans:   Search manpage given in agument &amp;#039;1&amp;#039; for term given in argument &amp;#039;2&amp;#039; (case insensitive)&lt;br /&gt;
#           displays paginated result with colored search terms and two lines surrounding each hit.             Example: mans mplayer codec&lt;br /&gt;
#   --------------------------------------------------------------------&lt;br /&gt;
    mans () {&lt;br /&gt;
        man $1 | grep -iC2 --color=always $2 | less&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
#   showa: to remind yourself of an alias (given some part of it)&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    showa () { /usr/bin/grep --color=always -i -a1 $@ ~/Library/init/bash/aliases.bash | grep -v &amp;#039;^\s*$&amp;#039; | less -FSRXc ; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
#   3.  FILE AND FOLDER MANAGEMENT&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
&lt;br /&gt;
zipf () { zip -r &amp;quot;$1&amp;quot;.zip &amp;quot;$1&amp;quot; ; }          # zipf:         To create a ZIP archive of a folder&lt;br /&gt;
alias numFiles=&amp;#039;echo $(ls -1 | wc -l)&amp;#039;      # numFiles:     Count of non-hidden files in current dir&lt;br /&gt;
alias make1mb=&amp;#039;mkfile 1m ./1MB.dat&amp;#039;         # make1mb:      Creates a file of 1mb size (all zeros)&lt;br /&gt;
alias make5mb=&amp;#039;mkfile 5m ./5MB.dat&amp;#039;         # make5mb:      Creates a file of 5mb size (all zeros)&lt;br /&gt;
alias make10mb=&amp;#039;mkfile 10m ./10MB.dat&amp;#039;      # make10mb:     Creates a file of 10mb size (all zeros)&lt;br /&gt;
&lt;br /&gt;
#   cdf:  &amp;#039;Cd&amp;#039;s to frontmost window of MacOS Finder&lt;br /&gt;
#   ------------------------------------------------------&lt;br /&gt;
    cdf () {&lt;br /&gt;
        currFolderPath=$( /usr/bin/osascript &amp;lt;&amp;lt;EOT&lt;br /&gt;
            tell application &amp;quot;Finder&amp;quot;&lt;br /&gt;
                try&lt;br /&gt;
            set currFolder to (folder of the front window as alias)&lt;br /&gt;
                on error&lt;br /&gt;
            set currFolder to (path to desktop folder as alias)&lt;br /&gt;
                end try&lt;br /&gt;
                POSIX path of currFolder&lt;br /&gt;
            end tell&lt;br /&gt;
EOT&lt;br /&gt;
        )&lt;br /&gt;
        echo &amp;quot;cd to \&amp;quot;$currFolderPath\&amp;quot;&amp;quot;&lt;br /&gt;
        cd &amp;quot;$currFolderPath&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
#   extract:  Extract most know archives with one command&lt;br /&gt;
#   ---------------------------------------------------------&lt;br /&gt;
    extract () {&lt;br /&gt;
        if [ -f $1 ] ; then&lt;br /&gt;
          case $1 in&lt;br /&gt;
            *.tar.bz2)   tar xjf $1     ;;&lt;br /&gt;
            *.tar.gz)    tar xzf $1     ;;&lt;br /&gt;
            *.bz2)       bunzip2 $1     ;;&lt;br /&gt;
            *.rar)       unrar e $1     ;;&lt;br /&gt;
            *.gz)        gunzip $1      ;;&lt;br /&gt;
            *.tar)       tar xf $1      ;;&lt;br /&gt;
            *.tbz2)      tar xjf $1     ;;&lt;br /&gt;
            *.tgz)       tar xzf $1     ;;&lt;br /&gt;
            *.zip)       unzip $1       ;;&lt;br /&gt;
            *.Z)         uncompress $1  ;;&lt;br /&gt;
            *.7z)        7z x $1        ;;&lt;br /&gt;
            *)     echo &amp;quot;&amp;#039;$1&amp;#039; cannot be extracted via extract()&amp;quot; ;;&lt;br /&gt;
             esac&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;&amp;#039;$1&amp;#039; is not a valid file&amp;quot;&lt;br /&gt;
         fi&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
#   4.  SEARCHING&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
&lt;br /&gt;
alias qfind=&amp;quot;find . -name &amp;quot;                 # qfind:    Quickly search for file&lt;br /&gt;
ff () { /usr/bin/find . -name &amp;quot;$@&amp;quot; ; }      # ff:       Find file under the current directory&lt;br /&gt;
ffs () { /usr/bin/find . -name &amp;quot;$@&amp;quot;&amp;#039;*&amp;#039; ; }  # ffs:      Find file whose name starts with a given string&lt;br /&gt;
ffe () { /usr/bin/find . -name &amp;#039;*&amp;#039;&amp;quot;$@&amp;quot; ; }  # ffe:      Find file whose name ends with a given string&lt;br /&gt;
&lt;br /&gt;
#   spotlight: Search for a file using MacOS Spotlight&amp;#039;s metadata&lt;br /&gt;
#   -----------------------------------------------------------&lt;br /&gt;
    spotlight () { mdfind &amp;quot;kMDItemDisplayName == &amp;#039;$@&amp;#039;wc&amp;quot;; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
#   5.  PROCESS MANAGEMENT&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
&lt;br /&gt;
#   findPid: find out the pid of a specified process&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
#       Note that the command name can be specified via a regex&lt;br /&gt;
#       E.g. findPid &amp;#039;/d$/&amp;#039; finds pids of all processes with names ending in &amp;#039;d&amp;#039;&lt;br /&gt;
#       Without the &amp;#039;sudo&amp;#039; it will only find processes of the current user&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    findPid () { lsof -t -c &amp;quot;$@&amp;quot; ; }&lt;br /&gt;
&lt;br /&gt;
#   memHogsTop, memHogsPs:  Find memory hogs&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    alias memHogsTop=&amp;#039;top -l 1 -o rsize | head -20&amp;#039;&lt;br /&gt;
    alias memHogsPs=&amp;#039;ps wwaxm -o pid,stat,vsize,rss,time,command | head -10&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   cpuHogs:  Find CPU hogs&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    alias cpu_hogs=&amp;#039;ps wwaxr -o pid,stat,%cpu,time,command | head -10&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   topForever:  Continual &amp;#039;top&amp;#039; listing (every 10 seconds)&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    alias topForever=&amp;#039;top -l 9999999 -s 10 -o cpu&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   ttop:  Recommended &amp;#039;top&amp;#039; invocation to minimize resources&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
#       Taken from this macosxhints article&lt;br /&gt;
#       http://www.macosxhints.com/article.php?story=20060816123853639&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    alias ttop=&amp;quot;top -R -F -s 10 -o rsize&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   my_ps: List processes owned by my user:&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    my_ps() { ps $@ -u $USER -o pid,%cpu,%mem,start,time,bsdtime,command ; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
#   6.  NETWORKING&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
&lt;br /&gt;
alias myip=&amp;#039;curl ip.appspot.com&amp;#039;                    # myip:         Public facing IP Address&lt;br /&gt;
alias netCons=&amp;#039;lsof -i&amp;#039;                             # netCons:      Show all open TCP/IP sockets&lt;br /&gt;
alias flushDNS=&amp;#039;dscacheutil -flushcache&amp;#039;            # flushDNS:     Flush out the DNS Cache&lt;br /&gt;
alias lsock=&amp;#039;sudo /usr/sbin/lsof -i -P&amp;#039;             # lsock:        Display open sockets&lt;br /&gt;
alias lsockU=&amp;#039;sudo /usr/sbin/lsof -nP | grep UDP&amp;#039;   # lsockU:       Display only open UDP sockets&lt;br /&gt;
alias lsockT=&amp;#039;sudo /usr/sbin/lsof -nP | grep TCP&amp;#039;   # lsockT:       Display only open TCP sockets&lt;br /&gt;
alias ipInfo0=&amp;#039;ipconfig getpacket en0&amp;#039;              # ipInfo0:      Get info on connections for en0&lt;br /&gt;
alias ipInfo1=&amp;#039;ipconfig getpacket en1&amp;#039;              # ipInfo1:      Get info on connections for en1&lt;br /&gt;
alias openPorts=&amp;#039;sudo lsof -i | grep LISTEN&amp;#039;        # openPorts:    All listening connections&lt;br /&gt;
alias showBlocked=&amp;#039;sudo ipfw list&amp;#039;                  # showBlocked:  All ipfw rules inc/ blocked IPs&lt;br /&gt;
&lt;br /&gt;
#   ii:  display useful host related informaton&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    ii() {&lt;br /&gt;
        echo -e &amp;quot;\nYou are logged on ${RED}$HOST&amp;quot;&lt;br /&gt;
        echo -e &amp;quot;\nAdditionnal information:$NC &amp;quot; ; uname -a&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Users logged on:$NC &amp;quot; ; w -h&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Current date :$NC &amp;quot; ; date&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Machine stats :$NC &amp;quot; ; uptime&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Current network location :$NC &amp;quot; ; scselect&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Public facing IP Address :$NC &amp;quot; ;myip&lt;br /&gt;
        #echo -e &amp;quot;\n${RED}DNS Configuration:$NC &amp;quot; ; scutil --dns&lt;br /&gt;
        echo&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   7.  SYSTEMS OPERATIONS &amp;amp; INFORMATION&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
&lt;br /&gt;
alias mountReadWrite=&amp;#039;/sbin/mount -uw /&amp;#039;    # mountReadWrite:   For use when booted into single-user&lt;br /&gt;
&lt;br /&gt;
#   cleanupDS:  Recursively delete .DS_Store files&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    alias cleanupDS=&amp;quot;find . -type f -name &amp;#039;*.DS_Store&amp;#039; -ls -delete&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   finderShowHidden:   Show hidden files in Finder&lt;br /&gt;
#   finderHideHidden:   Hide hidden files in Finder&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    alias finderShowHidden=&amp;#039;defaults write com.apple.finder ShowAllFiles TRUE&amp;#039;&lt;br /&gt;
    alias finderHideHidden=&amp;#039;defaults write com.apple.finder ShowAllFiles FALSE&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   cleanupLS:  Clean up LaunchServices to remove duplicates in the &amp;quot;Open With&amp;quot; menu&lt;br /&gt;
#   -----------------------------------------------------------------------------------&lt;br /&gt;
    alias cleanupLS=&amp;quot;/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user &amp;amp;&amp;amp; killall Finder&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#    screensaverDesktop: Run a screensaver on the Desktop&lt;br /&gt;
#   -----------------------------------------------------------------------------------&lt;br /&gt;
    alias screensaverDesktop=&amp;#039;/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   8.  WEB DEVELOPMENT&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
&lt;br /&gt;
alias apacheEdit=&amp;#039;sudo edit /etc/httpd/httpd.conf&amp;#039;      # apacheEdit:       Edit httpd.conf&lt;br /&gt;
alias apacheRestart=&amp;#039;sudo apachectl graceful&amp;#039;           # apacheRestart:    Restart Apache&lt;br /&gt;
alias editHosts=&amp;#039;sudo edit /etc/hosts&amp;#039;                  # editHosts:        Edit /etc/hosts file&lt;br /&gt;
alias herr=&amp;#039;tail /var/log/httpd/error_log&amp;#039;              # herr:             Tails HTTP error logs&lt;br /&gt;
alias apacheLogs=&amp;quot;less +F /var/log/apache2/error_log&amp;quot;   # Apachelogs:   Shows apache error logs&lt;br /&gt;
httpHeaders () { /usr/bin/curl -I -L $@ ; }             # httpHeaders:      Grabs headers from web page&lt;br /&gt;
&lt;br /&gt;
#   httpDebug:  Download a web page and show info on what took time&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    httpDebug () { /usr/bin/curl $@ -o /dev/null -w &amp;quot;dns: %{time_namelookup} connect: %{time_connect} pretransfer: %{time_pretransfer} starttransfer: %{time_starttransfer} total: %{time_total}\n&amp;quot; ; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   9.  REMINDERS &amp;amp; NOTES&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
&lt;br /&gt;
#   remove_disk: spin down unneeded disk&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   diskutil eject /dev/disk1s3&lt;br /&gt;
&lt;br /&gt;
#   to change the password on an encrypted disk image:&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   hdiutil chpass /path/to/the/diskimage&lt;br /&gt;
&lt;br /&gt;
#   to mount a read-only disk image as read-write:&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   hdiutil attach example.dmg -shadow /tmp/example.shadow -noverify&lt;br /&gt;
&lt;br /&gt;
#   mounting a removable drive (of type msdos or hfs)&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   mkdir /Volumes/Foo&lt;br /&gt;
#   ls /dev/disk*   to find out the device to use in the mount command)&lt;br /&gt;
#   mount -t msdos /dev/disk1s1 /Volumes/Foo&lt;br /&gt;
#   mount -t hfs /dev/disk1s1 /Volumes/Foo&lt;br /&gt;
&lt;br /&gt;
#   to create a file of a given size: /usr/sbin/mkfile or /usr/bin/hdiutil&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   e.g.: mkfile 10m 10MB.dat&lt;br /&gt;
#   e.g.: hdiutil create -size 10m 10MB.dmg&lt;br /&gt;
#   the above create files that are almost all zeros - if random bytes are desired&lt;br /&gt;
#   then use: ~/Dev/Perl/randBytes 1048576 &amp;gt; 10MB.dat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipps und Tricks ==&lt;br /&gt;
=== Mit Terminal auf externe Festplatte zugreifen ===&lt;br /&gt;
 /Volumes&lt;br /&gt;
=== Dateien kopieren, bewegen, umbenennen ===&lt;br /&gt;
 https://www.macworld.com/article/222558/macos-command-line-copying-moving-files-terminal.html&lt;br /&gt;
&lt;br /&gt;
 cp source.txt target.txt&lt;br /&gt;
 cp -R sourceFolder/ /Volumes/backupDrive/myBackupFolder&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Mac_Terminal_Tipps&amp;diff=25405</id>
		<title>Mac Terminal Tipps</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Mac_Terminal_Tipps&amp;diff=25405"/>
		<updated>2021-09-22T10:32:31Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;siehe auch &lt;br /&gt;
 [[Linux]]&lt;br /&gt;
 [[Terminal und Konsole auf dem Mac]]&lt;br /&gt;
== Finder zeigt alle Dateien und Ordner an ==&lt;br /&gt;
 defaults write com.apple.Finder AppleShowAllFiles YES&lt;br /&gt;
danach Finder neu starten, damit die Änderungen sichtbar werden:&lt;br /&gt;
 killall Finder&lt;br /&gt;
&lt;br /&gt;
== Sendmail aktivieren ==&lt;br /&gt;
 Macintosh HD -&amp;gt; etc -&amp;gt; hostconfig&lt;br /&gt;
 MAILSERVER=-YES-&lt;br /&gt;
=== Für php mail() Befehl ===&lt;br /&gt;
php.ini&lt;br /&gt;
 sendmail_path = /usr/sbin/sendmail -t -i&lt;br /&gt;
&lt;br /&gt;
== Netzlaufwerke finden ==&lt;br /&gt;
Netzlaufwerke sind (wenn sie gemounted sind unter &lt;br /&gt;
cd /Volumes&lt;br /&gt;
&lt;br /&gt;
erreichbar&lt;br /&gt;
&lt;br /&gt;
Du kannst Dir die gemounteten  Disks im Terminal mit &lt;br /&gt;
 diskutil list &lt;br /&gt;
ansehen, dort steht dann der &amp;quot;Diskname&amp;quot; z. B. &lt;br /&gt;
 /dev/disk0 &lt;br /&gt;
sowie die Partitionsnamen.&lt;br /&gt;
&lt;br /&gt;
In der mittleren Spalte ist dann auch der Mountname angegeben.&lt;br /&gt;
Eingeblendet werden die Disks über das Verzeichnis &lt;br /&gt;
 /Volumes&lt;br /&gt;
Hier gilt: das &amp;quot;V&amp;quot; wird groß geschrieben!&lt;br /&gt;
&lt;br /&gt;
Dort existieren Unterverzeichnisse mit den Namen der Disks. Z.B.:&lt;br /&gt;
 /Volumes/martin/&lt;br /&gt;
 /Volumes/files/&lt;br /&gt;
&lt;br /&gt;
Anmerkung Steff: diskutil list scheint nicht ohne weiteres mit Netzlaufwerken zu funktionieren&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Terminal_und_Konsole_auf_dem_Mac&amp;diff=25404</id>
		<title>Terminal und Konsole auf dem Mac</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Terminal_und_Konsole_auf_dem_Mac&amp;diff=25404"/>
		<updated>2021-09-20T16:51:58Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: /* Quickstart */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tips für die Arbeit mit dem Terminal&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Das Terminal ist ein Fenster mit dem man verschiedene Shells starten kann. Diese wiederum könnnen verschiedenste Befehle und Skripte ausführen.&lt;br /&gt;
&lt;br /&gt;
Das Erscheinungsbild des Terminals kann man einfach Verbessern. Dazu kann man z.B. im Home-Directory die Dateien &amp;#039;&amp;#039;&amp;#039;.bash_profile&amp;#039;&amp;#039;&amp;#039; or &amp;#039;&amp;#039;&amp;#039;.bashrc&amp;#039;&amp;#039;&amp;#039; anpassen. Aber auch die &amp;#039;&amp;#039;&amp;#039;.profile&amp;#039;&amp;#039;&amp;#039; Datei Funktioniert. Je nachdem ob man die User Dateien oder die Globalen nimmt wird die Änderung global oder auf User-Ebene umgesetzt. Wenn die Dateien nicht vorhanden sind einfach hinzufügen.&lt;br /&gt;
&lt;br /&gt;
== Quickstart ==&lt;br /&gt;
=== Skripte schreiben ===&lt;br /&gt;
 https://support.apple.com/de-de/guide/terminal/apd53500956-7c5b-496b-a362-2845f2aab4bc/2.11/mac/11.0&lt;br /&gt;
=== Datei ausführbar machen und ausführen ===&lt;br /&gt;
 cd YourScriptDirectory&lt;br /&gt;
Gib den Befehl chmod ein. Zum Beispiel:&lt;br /&gt;
 % chmod 755 YourScriptName.sh&lt;br /&gt;
&lt;br /&gt;
Nachdem du aus der Shell-Skript-Datei eine ausführbare Datei gemacht hast, kannst du diese durch Eingeben des Pfadnamens ausführen. Zum Beispiel:&lt;br /&gt;
 % ~/Documents/Dev/YourScriptName.sh&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
 % cd ~/Documents/Dev/ &lt;br /&gt;
 % ./YourScriptName.sh&lt;br /&gt;
&lt;br /&gt;
=== Befehle für die Shell / Shell-Skripte ===&lt;br /&gt;
Diese liegen i.d.R. in &lt;br /&gt;
 /bin&lt;br /&gt;
 /sbin &lt;br /&gt;
 /usr/bin&lt;br /&gt;
 /usr/sbin&lt;br /&gt;
wobei sbin superuser Befehle enthält. /bin und /sbin werden früh im Bootprozess geladen und enthalen dementsprechende Befehle. Die Ordner in /usr (unix system resources) Hier findest du über 1000 Kommandos. Generell gilt alles was der Finder kann, kannst du auch mit einem Skript erreichen. Der Finder ist im Prinzip auch ein Interpreter.&lt;br /&gt;
&lt;br /&gt;
Weitere Befehle können z.b. in &lt;br /&gt;
 /usr/local/bin&lt;br /&gt;
liegen. Der ist für Befehle vorgesehen, die nicht mit dem OS ausgeliefert werden.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
=== zsh shell statt bash ab Catalina ===&lt;br /&gt;
https://support.apple.com/de-de/HT208050&lt;br /&gt;
== Prompt anpassen ==&lt;br /&gt;
Wie oben beschrieben z.B. in die .bash_profile datei&lt;br /&gt;
&amp;#039;&amp;#039;Farbiges&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;Prompt&amp;#039;&amp;#039;&amp;#039; und Anzeige als: &amp;#039;&amp;#039;“username@hostname:cwd $”&amp;#039;&amp;#039;&lt;br /&gt;
 export PS1=&amp;quot;\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ &amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Farben auf Mac Terminal ==&lt;br /&gt;
 export CLICOLOR=1&lt;br /&gt;
 export LSCOLORS=GxFxCxDxBxegedabagaced&lt;br /&gt;
&lt;br /&gt;
CLICOLOR=1 bedeutet Farbe anschalten&lt;br /&gt;
LSCOLORS= Farben für die anzeige im Listkommando&lt;br /&gt;
== Mac UNIX ==&lt;br /&gt;
Basiert auf UNIX&lt;br /&gt;
&lt;br /&gt;
Apfel &amp;gt; Über diesen Mac &amp;gt; Software (da steht z.B. die kernel Version)&lt;br /&gt;
&lt;br /&gt;
== Umgebungsvariablen, PATH Variable etc.== &lt;br /&gt;
siehe auch: http://wiki.zone30.info/wikizone/index.php/Linux_-_Umgebungsvariable&lt;br /&gt;
&lt;br /&gt;
alle kriegt man mit&lt;br /&gt;
 set | less&lt;br /&gt;
eine einzelne z.B. mit:&lt;br /&gt;
echo $PATH &lt;br /&gt;
&lt;br /&gt;
==== PATH Variable anpassen ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hinzufügen&amp;#039;&amp;#039;&amp;#039; eines Pfades für eine &amp;#039;&amp;#039;&amp;#039;einzelne&amp;#039;&amp;#039;&amp;#039; Terminal &amp;#039;&amp;#039;&amp;#039;Session&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
 PATH=MeinZusatzPfad:$PATH&lt;br /&gt;
 export PATH&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exportieren&amp;#039;&amp;#039;&amp;#039; ist wichtig wenn die neue Variable auch in &amp;#039;&amp;#039;&amp;#039;Unterterminals&amp;#039;&amp;#039;&amp;#039; zur Verfügung stehen soll (z.B. bei Bash Skripten)&lt;br /&gt;
&lt;br /&gt;
=== Dauerhaft PATH Variable in der Bash setzen ===&lt;br /&gt;
Auf diese Weise stehen die PATH Variable &amp;#039;&amp;#039;&amp;#039;bei jeder Sitzung&amp;#039;&amp;#039;&amp;#039; zur Verfügung. Mac speichert die Bash Datei im Userverzeichnis. &lt;br /&gt;
&lt;br /&gt;
Wir öffnen die bash_profile Datei im Standard Editor (wenn Sie nicht vorhanden ist wird Sie erzeugt).&lt;br /&gt;
 touch ~/.bash_profile; open ~/.bash_profile&lt;br /&gt;
Jetzt können wir die Variable setzen. Hier ein Beispiel mit der Android ADT&lt;br /&gt;
 export PATH=/Users/schlegel/Development/adt-bundle-mac-x86_64/sdk/platform-tools:/Users/schlegel/Development/adt-bundle-mac-x86_64/sdk/tools:$PATH&lt;br /&gt;
&lt;br /&gt;
Durch das :$PATH am Ende wird der neue Wert zu den Standardwerten hinzugefügt oder hier besser vorangestellt)&lt;br /&gt;
&lt;br /&gt;
Jetzt noch die Datei abspeichern und ausführen:&lt;br /&gt;
&lt;br /&gt;
 source ~/.bash_profile&lt;br /&gt;
== Umfangreiches .bash_profile Beispiel ==&lt;br /&gt;
Quelle: http://natelandau.com/my-mac-osx-bash_profile/ (2015-10)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#  ---------------------------------------------------------------------------&lt;br /&gt;
#&lt;br /&gt;
#  Description:  This file holds all my BASH configurations and aliases&lt;br /&gt;
#&lt;br /&gt;
#  Sections:&lt;br /&gt;
#  1.   Environment Configuration&lt;br /&gt;
#  2.   Make Terminal Better (remapping defaults and adding functionality)&lt;br /&gt;
#  3.   File and Folder Management&lt;br /&gt;
#  4.   Searching&lt;br /&gt;
#  5.   Process Management&lt;br /&gt;
#  6.   Networking&lt;br /&gt;
#  7.   System Operations &amp;amp; Information&lt;br /&gt;
#  8.   Web Development&lt;br /&gt;
#  9.   Reminders &amp;amp; Notes&lt;br /&gt;
#&lt;br /&gt;
#  ---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
#   1.  ENVIRONMENT CONFIGURATION&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
&lt;br /&gt;
#   Change Prompt&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export PS1=&amp;quot;________________________________________________________________________________\n| \w @ \h (\u) \n| =&amp;gt; &amp;quot;&lt;br /&gt;
    export PS2=&amp;quot;| =&amp;gt; &amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   Set Paths&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export PATH=&amp;quot;$PATH:/usr/local/bin/&amp;quot;&lt;br /&gt;
    export PATH=&amp;quot;/usr/local/git/bin:/sw/bin/:/usr/local/bin:/usr/local/:/usr/local/sbin:/usr/local/mysql/bin:$PATH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   Set Default Editor (change &amp;#039;Nano&amp;#039; to the editor of your choice)&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export EDITOR=/usr/bin/nano&lt;br /&gt;
&lt;br /&gt;
#   Set default blocksize for ls, df, du&lt;br /&gt;
#   from this: http://hints.macworld.com/comment.php?mode=view&amp;amp;cid=24491&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export BLOCKSIZE=1k&lt;br /&gt;
&lt;br /&gt;
#   Add color to terminal&lt;br /&gt;
#   (this is all commented out as I use Mac Terminal Profiles)&lt;br /&gt;
#   from http://osxdaily.com/2012/02/21/add-color-to-the-terminal-in-mac-os-x/&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
#   export CLICOLOR=1&lt;br /&gt;
#   export LSCOLORS=ExFxBxDxCxegedabagacad&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   -----------------------------&lt;br /&gt;
#   2.  MAKE TERMINAL BETTER&lt;br /&gt;
#   -----------------------------&lt;br /&gt;
&lt;br /&gt;
alias cp=&amp;#039;cp -iv&amp;#039;                           # Preferred &amp;#039;cp&amp;#039; implementation&lt;br /&gt;
alias mv=&amp;#039;mv -iv&amp;#039;                           # Preferred &amp;#039;mv&amp;#039; implementation&lt;br /&gt;
alias mkdir=&amp;#039;mkdir -pv&amp;#039;                     # Preferred &amp;#039;mkdir&amp;#039; implementation&lt;br /&gt;
alias ll=&amp;#039;ls -FGlAhp&amp;#039;                       # Preferred &amp;#039;ls&amp;#039; implementation&lt;br /&gt;
alias less=&amp;#039;less -FSRXc&amp;#039;                    # Preferred &amp;#039;less&amp;#039; implementation&lt;br /&gt;
cd() { builtin cd &amp;quot;$@&amp;quot;; ll; }               # Always list directory contents upon &amp;#039;cd&amp;#039;&lt;br /&gt;
alias cd..=&amp;#039;cd ../&amp;#039;                         # Go back 1 directory level (for fast typers)&lt;br /&gt;
alias ..=&amp;#039;cd ../&amp;#039;                           # Go back 1 directory level&lt;br /&gt;
alias ...=&amp;#039;cd ../../&amp;#039;                       # Go back 2 directory levels&lt;br /&gt;
alias .3=&amp;#039;cd ../../../&amp;#039;                     # Go back 3 directory levels&lt;br /&gt;
alias .4=&amp;#039;cd ../../../../&amp;#039;                  # Go back 4 directory levels&lt;br /&gt;
alias .5=&amp;#039;cd ../../../../../&amp;#039;               # Go back 5 directory levels&lt;br /&gt;
alias .6=&amp;#039;cd ../../../../../../&amp;#039;            # Go back 6 directory levels&lt;br /&gt;
alias edit=&amp;#039;subl&amp;#039;                           # edit:         Opens any file in sublime editor&lt;br /&gt;
alias f=&amp;#039;open -a Finder ./&amp;#039;                 # f:            Opens current directory in MacOS Finder&lt;br /&gt;
alias ~=&amp;quot;cd ~&amp;quot;                              # ~:            Go Home&lt;br /&gt;
alias c=&amp;#039;clear&amp;#039;                             # c:            Clear terminal display&lt;br /&gt;
alias which=&amp;#039;type -all&amp;#039;                     # which:        Find executables&lt;br /&gt;
alias path=&amp;#039;echo -e ${PATH//:/\\n}&amp;#039;         # path:         Echo all executable Paths&lt;br /&gt;
alias show_options=&amp;#039;shopt&amp;#039;                  # Show_options: display bash options settings&lt;br /&gt;
alias fix_stty=&amp;#039;stty sane&amp;#039;                  # fix_stty:     Restore terminal settings when screwed up&lt;br /&gt;
alias cic=&amp;#039;set completion-ignore-case On&amp;#039;   # cic:          Make tab-completion case-insensitive&lt;br /&gt;
mcd () { mkdir -p &amp;quot;$1&amp;quot; &amp;amp;&amp;amp; cd &amp;quot;$1&amp;quot;; }        # mcd:          Makes new Dir and jumps inside&lt;br /&gt;
trash () { command mv &amp;quot;$@&amp;quot; ~/.Trash ; }     # trash:        Moves a file to the MacOS trash&lt;br /&gt;
ql () { qlmanage -p &amp;quot;$*&amp;quot; &amp;gt;&amp;amp; /dev/null; }    # ql:           Opens any file in MacOS Quicklook Preview&lt;br /&gt;
alias DT=&amp;#039;tee ~/Desktop/terminalOut.txt&amp;#039;    # DT:           Pipe content to file on MacOS Desktop&lt;br /&gt;
&lt;br /&gt;
#   lr:  Full Recursive Directory Listing&lt;br /&gt;
#   ------------------------------------------&lt;br /&gt;
alias lr=&amp;#039;ls -R | grep &amp;quot;:$&amp;quot; | sed -e &amp;#039;\&amp;#039;&amp;#039;s/:$//&amp;#039;\&amp;#039;&amp;#039; -e &amp;#039;\&amp;#039;&amp;#039;s/[^-][^\/]*\//--/g&amp;#039;\&amp;#039;&amp;#039; -e &amp;#039;\&amp;#039;&amp;#039;s/^/   /&amp;#039;\&amp;#039;&amp;#039; -e &amp;#039;\&amp;#039;&amp;#039;s/-/|/&amp;#039;\&amp;#039;&amp;#039; | less&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   mans:   Search manpage given in agument &amp;#039;1&amp;#039; for term given in argument &amp;#039;2&amp;#039; (case insensitive)&lt;br /&gt;
#           displays paginated result with colored search terms and two lines surrounding each hit.             Example: mans mplayer codec&lt;br /&gt;
#   --------------------------------------------------------------------&lt;br /&gt;
    mans () {&lt;br /&gt;
        man $1 | grep -iC2 --color=always $2 | less&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
#   showa: to remind yourself of an alias (given some part of it)&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    showa () { /usr/bin/grep --color=always -i -a1 $@ ~/Library/init/bash/aliases.bash | grep -v &amp;#039;^\s*$&amp;#039; | less -FSRXc ; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
#   3.  FILE AND FOLDER MANAGEMENT&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
&lt;br /&gt;
zipf () { zip -r &amp;quot;$1&amp;quot;.zip &amp;quot;$1&amp;quot; ; }          # zipf:         To create a ZIP archive of a folder&lt;br /&gt;
alias numFiles=&amp;#039;echo $(ls -1 | wc -l)&amp;#039;      # numFiles:     Count of non-hidden files in current dir&lt;br /&gt;
alias make1mb=&amp;#039;mkfile 1m ./1MB.dat&amp;#039;         # make1mb:      Creates a file of 1mb size (all zeros)&lt;br /&gt;
alias make5mb=&amp;#039;mkfile 5m ./5MB.dat&amp;#039;         # make5mb:      Creates a file of 5mb size (all zeros)&lt;br /&gt;
alias make10mb=&amp;#039;mkfile 10m ./10MB.dat&amp;#039;      # make10mb:     Creates a file of 10mb size (all zeros)&lt;br /&gt;
&lt;br /&gt;
#   cdf:  &amp;#039;Cd&amp;#039;s to frontmost window of MacOS Finder&lt;br /&gt;
#   ------------------------------------------------------&lt;br /&gt;
    cdf () {&lt;br /&gt;
        currFolderPath=$( /usr/bin/osascript &amp;lt;&amp;lt;EOT&lt;br /&gt;
            tell application &amp;quot;Finder&amp;quot;&lt;br /&gt;
                try&lt;br /&gt;
            set currFolder to (folder of the front window as alias)&lt;br /&gt;
                on error&lt;br /&gt;
            set currFolder to (path to desktop folder as alias)&lt;br /&gt;
                end try&lt;br /&gt;
                POSIX path of currFolder&lt;br /&gt;
            end tell&lt;br /&gt;
EOT&lt;br /&gt;
        )&lt;br /&gt;
        echo &amp;quot;cd to \&amp;quot;$currFolderPath\&amp;quot;&amp;quot;&lt;br /&gt;
        cd &amp;quot;$currFolderPath&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
#   extract:  Extract most know archives with one command&lt;br /&gt;
#   ---------------------------------------------------------&lt;br /&gt;
    extract () {&lt;br /&gt;
        if [ -f $1 ] ; then&lt;br /&gt;
          case $1 in&lt;br /&gt;
            *.tar.bz2)   tar xjf $1     ;;&lt;br /&gt;
            *.tar.gz)    tar xzf $1     ;;&lt;br /&gt;
            *.bz2)       bunzip2 $1     ;;&lt;br /&gt;
            *.rar)       unrar e $1     ;;&lt;br /&gt;
            *.gz)        gunzip $1      ;;&lt;br /&gt;
            *.tar)       tar xf $1      ;;&lt;br /&gt;
            *.tbz2)      tar xjf $1     ;;&lt;br /&gt;
            *.tgz)       tar xzf $1     ;;&lt;br /&gt;
            *.zip)       unzip $1       ;;&lt;br /&gt;
            *.Z)         uncompress $1  ;;&lt;br /&gt;
            *.7z)        7z x $1        ;;&lt;br /&gt;
            *)     echo &amp;quot;&amp;#039;$1&amp;#039; cannot be extracted via extract()&amp;quot; ;;&lt;br /&gt;
             esac&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;&amp;#039;$1&amp;#039; is not a valid file&amp;quot;&lt;br /&gt;
         fi&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
#   4.  SEARCHING&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
&lt;br /&gt;
alias qfind=&amp;quot;find . -name &amp;quot;                 # qfind:    Quickly search for file&lt;br /&gt;
ff () { /usr/bin/find . -name &amp;quot;$@&amp;quot; ; }      # ff:       Find file under the current directory&lt;br /&gt;
ffs () { /usr/bin/find . -name &amp;quot;$@&amp;quot;&amp;#039;*&amp;#039; ; }  # ffs:      Find file whose name starts with a given string&lt;br /&gt;
ffe () { /usr/bin/find . -name &amp;#039;*&amp;#039;&amp;quot;$@&amp;quot; ; }  # ffe:      Find file whose name ends with a given string&lt;br /&gt;
&lt;br /&gt;
#   spotlight: Search for a file using MacOS Spotlight&amp;#039;s metadata&lt;br /&gt;
#   -----------------------------------------------------------&lt;br /&gt;
    spotlight () { mdfind &amp;quot;kMDItemDisplayName == &amp;#039;$@&amp;#039;wc&amp;quot;; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
#   5.  PROCESS MANAGEMENT&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
&lt;br /&gt;
#   findPid: find out the pid of a specified process&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
#       Note that the command name can be specified via a regex&lt;br /&gt;
#       E.g. findPid &amp;#039;/d$/&amp;#039; finds pids of all processes with names ending in &amp;#039;d&amp;#039;&lt;br /&gt;
#       Without the &amp;#039;sudo&amp;#039; it will only find processes of the current user&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    findPid () { lsof -t -c &amp;quot;$@&amp;quot; ; }&lt;br /&gt;
&lt;br /&gt;
#   memHogsTop, memHogsPs:  Find memory hogs&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    alias memHogsTop=&amp;#039;top -l 1 -o rsize | head -20&amp;#039;&lt;br /&gt;
    alias memHogsPs=&amp;#039;ps wwaxm -o pid,stat,vsize,rss,time,command | head -10&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   cpuHogs:  Find CPU hogs&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    alias cpu_hogs=&amp;#039;ps wwaxr -o pid,stat,%cpu,time,command | head -10&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   topForever:  Continual &amp;#039;top&amp;#039; listing (every 10 seconds)&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    alias topForever=&amp;#039;top -l 9999999 -s 10 -o cpu&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   ttop:  Recommended &amp;#039;top&amp;#039; invocation to minimize resources&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
#       Taken from this macosxhints article&lt;br /&gt;
#       http://www.macosxhints.com/article.php?story=20060816123853639&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    alias ttop=&amp;quot;top -R -F -s 10 -o rsize&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   my_ps: List processes owned by my user:&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    my_ps() { ps $@ -u $USER -o pid,%cpu,%mem,start,time,bsdtime,command ; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
#   6.  NETWORKING&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
&lt;br /&gt;
alias myip=&amp;#039;curl ip.appspot.com&amp;#039;                    # myip:         Public facing IP Address&lt;br /&gt;
alias netCons=&amp;#039;lsof -i&amp;#039;                             # netCons:      Show all open TCP/IP sockets&lt;br /&gt;
alias flushDNS=&amp;#039;dscacheutil -flushcache&amp;#039;            # flushDNS:     Flush out the DNS Cache&lt;br /&gt;
alias lsock=&amp;#039;sudo /usr/sbin/lsof -i -P&amp;#039;             # lsock:        Display open sockets&lt;br /&gt;
alias lsockU=&amp;#039;sudo /usr/sbin/lsof -nP | grep UDP&amp;#039;   # lsockU:       Display only open UDP sockets&lt;br /&gt;
alias lsockT=&amp;#039;sudo /usr/sbin/lsof -nP | grep TCP&amp;#039;   # lsockT:       Display only open TCP sockets&lt;br /&gt;
alias ipInfo0=&amp;#039;ipconfig getpacket en0&amp;#039;              # ipInfo0:      Get info on connections for en0&lt;br /&gt;
alias ipInfo1=&amp;#039;ipconfig getpacket en1&amp;#039;              # ipInfo1:      Get info on connections for en1&lt;br /&gt;
alias openPorts=&amp;#039;sudo lsof -i | grep LISTEN&amp;#039;        # openPorts:    All listening connections&lt;br /&gt;
alias showBlocked=&amp;#039;sudo ipfw list&amp;#039;                  # showBlocked:  All ipfw rules inc/ blocked IPs&lt;br /&gt;
&lt;br /&gt;
#   ii:  display useful host related informaton&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    ii() {&lt;br /&gt;
        echo -e &amp;quot;\nYou are logged on ${RED}$HOST&amp;quot;&lt;br /&gt;
        echo -e &amp;quot;\nAdditionnal information:$NC &amp;quot; ; uname -a&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Users logged on:$NC &amp;quot; ; w -h&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Current date :$NC &amp;quot; ; date&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Machine stats :$NC &amp;quot; ; uptime&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Current network location :$NC &amp;quot; ; scselect&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Public facing IP Address :$NC &amp;quot; ;myip&lt;br /&gt;
        #echo -e &amp;quot;\n${RED}DNS Configuration:$NC &amp;quot; ; scutil --dns&lt;br /&gt;
        echo&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   7.  SYSTEMS OPERATIONS &amp;amp; INFORMATION&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
&lt;br /&gt;
alias mountReadWrite=&amp;#039;/sbin/mount -uw /&amp;#039;    # mountReadWrite:   For use when booted into single-user&lt;br /&gt;
&lt;br /&gt;
#   cleanupDS:  Recursively delete .DS_Store files&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    alias cleanupDS=&amp;quot;find . -type f -name &amp;#039;*.DS_Store&amp;#039; -ls -delete&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   finderShowHidden:   Show hidden files in Finder&lt;br /&gt;
#   finderHideHidden:   Hide hidden files in Finder&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    alias finderShowHidden=&amp;#039;defaults write com.apple.finder ShowAllFiles TRUE&amp;#039;&lt;br /&gt;
    alias finderHideHidden=&amp;#039;defaults write com.apple.finder ShowAllFiles FALSE&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   cleanupLS:  Clean up LaunchServices to remove duplicates in the &amp;quot;Open With&amp;quot; menu&lt;br /&gt;
#   -----------------------------------------------------------------------------------&lt;br /&gt;
    alias cleanupLS=&amp;quot;/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user &amp;amp;&amp;amp; killall Finder&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#    screensaverDesktop: Run a screensaver on the Desktop&lt;br /&gt;
#   -----------------------------------------------------------------------------------&lt;br /&gt;
    alias screensaverDesktop=&amp;#039;/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   8.  WEB DEVELOPMENT&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
&lt;br /&gt;
alias apacheEdit=&amp;#039;sudo edit /etc/httpd/httpd.conf&amp;#039;      # apacheEdit:       Edit httpd.conf&lt;br /&gt;
alias apacheRestart=&amp;#039;sudo apachectl graceful&amp;#039;           # apacheRestart:    Restart Apache&lt;br /&gt;
alias editHosts=&amp;#039;sudo edit /etc/hosts&amp;#039;                  # editHosts:        Edit /etc/hosts file&lt;br /&gt;
alias herr=&amp;#039;tail /var/log/httpd/error_log&amp;#039;              # herr:             Tails HTTP error logs&lt;br /&gt;
alias apacheLogs=&amp;quot;less +F /var/log/apache2/error_log&amp;quot;   # Apachelogs:   Shows apache error logs&lt;br /&gt;
httpHeaders () { /usr/bin/curl -I -L $@ ; }             # httpHeaders:      Grabs headers from web page&lt;br /&gt;
&lt;br /&gt;
#   httpDebug:  Download a web page and show info on what took time&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    httpDebug () { /usr/bin/curl $@ -o /dev/null -w &amp;quot;dns: %{time_namelookup} connect: %{time_connect} pretransfer: %{time_pretransfer} starttransfer: %{time_starttransfer} total: %{time_total}\n&amp;quot; ; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   9.  REMINDERS &amp;amp; NOTES&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
&lt;br /&gt;
#   remove_disk: spin down unneeded disk&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   diskutil eject /dev/disk1s3&lt;br /&gt;
&lt;br /&gt;
#   to change the password on an encrypted disk image:&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   hdiutil chpass /path/to/the/diskimage&lt;br /&gt;
&lt;br /&gt;
#   to mount a read-only disk image as read-write:&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   hdiutil attach example.dmg -shadow /tmp/example.shadow -noverify&lt;br /&gt;
&lt;br /&gt;
#   mounting a removable drive (of type msdos or hfs)&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   mkdir /Volumes/Foo&lt;br /&gt;
#   ls /dev/disk*   to find out the device to use in the mount command)&lt;br /&gt;
#   mount -t msdos /dev/disk1s1 /Volumes/Foo&lt;br /&gt;
#   mount -t hfs /dev/disk1s1 /Volumes/Foo&lt;br /&gt;
&lt;br /&gt;
#   to create a file of a given size: /usr/sbin/mkfile or /usr/bin/hdiutil&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   e.g.: mkfile 10m 10MB.dat&lt;br /&gt;
#   e.g.: hdiutil create -size 10m 10MB.dmg&lt;br /&gt;
#   the above create files that are almost all zeros - if random bytes are desired&lt;br /&gt;
#   then use: ~/Dev/Perl/randBytes 1048576 &amp;gt; 10MB.dat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipps und Tricks ==&lt;br /&gt;
=== Mit Terminal auf externe Festplatte zugreifen ===&lt;br /&gt;
 /Volumes&lt;br /&gt;
=== Dateien kopieren, bewegen, umbenennen ===&lt;br /&gt;
 https://www.macworld.com/article/222558/macos-command-line-copying-moving-files-terminal.html&lt;br /&gt;
&lt;br /&gt;
 cp source.txt target.txt&lt;br /&gt;
 cp -R sourceFolder/ /Volumes/backupDrive/myBackupFolder&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Terminal_und_Konsole_auf_dem_Mac&amp;diff=25403</id>
		<title>Terminal und Konsole auf dem Mac</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Terminal_und_Konsole_auf_dem_Mac&amp;diff=25403"/>
		<updated>2021-09-20T16:49:02Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tips für die Arbeit mit dem Terminal&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Das Terminal ist ein Fenster mit dem man verschiedene Shells starten kann. Diese wiederum könnnen verschiedenste Befehle und Skripte ausführen.&lt;br /&gt;
&lt;br /&gt;
Das Erscheinungsbild des Terminals kann man einfach Verbessern. Dazu kann man z.B. im Home-Directory die Dateien &amp;#039;&amp;#039;&amp;#039;.bash_profile&amp;#039;&amp;#039;&amp;#039; or &amp;#039;&amp;#039;&amp;#039;.bashrc&amp;#039;&amp;#039;&amp;#039; anpassen. Aber auch die &amp;#039;&amp;#039;&amp;#039;.profile&amp;#039;&amp;#039;&amp;#039; Datei Funktioniert. Je nachdem ob man die User Dateien oder die Globalen nimmt wird die Änderung global oder auf User-Ebene umgesetzt. Wenn die Dateien nicht vorhanden sind einfach hinzufügen.&lt;br /&gt;
&lt;br /&gt;
== Quickstart ==&lt;br /&gt;
=== Skripte schreiben ===&lt;br /&gt;
 https://support.apple.com/de-de/guide/terminal/apd53500956-7c5b-496b-a362-2845f2aab4bc/2.11/mac/11.0&lt;br /&gt;
=== Datei ausführbar machen und ausführen ===&lt;br /&gt;
 cd YourScriptDirectory&lt;br /&gt;
Gib den Befehl chmod ein. Zum Beispiel:&lt;br /&gt;
 % chmod 755 YourScriptName.sh&lt;br /&gt;
&lt;br /&gt;
Nachdem du aus der Shell-Skript-Datei eine ausführbare Datei gemacht hast, kannst du diese durch Eingeben des Pfadnamens ausführen. Zum Beispiel:&lt;br /&gt;
 % ~/Documents/Dev/YourScriptName.sh&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
 % cd ~/Documents/Dev/ &lt;br /&gt;
 % ./YourScriptName.sh&lt;br /&gt;
&lt;br /&gt;
=== Befehle für die Shell / Shell-Skripte ===&lt;br /&gt;
Diese lieten i.d.R. in &lt;br /&gt;
 /bin&lt;br /&gt;
 /sbin &lt;br /&gt;
 /usr/bin&lt;br /&gt;
 /usr/sbin&lt;br /&gt;
wobei sbin superuser Befehle enthält. /bin und /sbin werden früh im Bootprozess geladen und enthalen dementsprechende Befehle. Die Ordner in /usr (unix system resources) Hier findest du tausende von Kommandos.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
=== zsh shell statt bash ab Catalina ===&lt;br /&gt;
https://support.apple.com/de-de/HT208050&lt;br /&gt;
== Prompt anpassen ==&lt;br /&gt;
Wie oben beschrieben z.B. in die .bash_profile datei&lt;br /&gt;
&amp;#039;&amp;#039;Farbiges&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;Prompt&amp;#039;&amp;#039;&amp;#039; und Anzeige als: &amp;#039;&amp;#039;“username@hostname:cwd $”&amp;#039;&amp;#039;&lt;br /&gt;
 export PS1=&amp;quot;\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ &amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Farben auf Mac Terminal ==&lt;br /&gt;
 export CLICOLOR=1&lt;br /&gt;
 export LSCOLORS=GxFxCxDxBxegedabagaced&lt;br /&gt;
&lt;br /&gt;
CLICOLOR=1 bedeutet Farbe anschalten&lt;br /&gt;
LSCOLORS= Farben für die anzeige im Listkommando&lt;br /&gt;
== Mac UNIX ==&lt;br /&gt;
Basiert auf UNIX&lt;br /&gt;
&lt;br /&gt;
Apfel &amp;gt; Über diesen Mac &amp;gt; Software (da steht z.B. die kernel Version)&lt;br /&gt;
&lt;br /&gt;
== Umgebungsvariablen, PATH Variable etc.== &lt;br /&gt;
siehe auch: http://wiki.zone30.info/wikizone/index.php/Linux_-_Umgebungsvariable&lt;br /&gt;
&lt;br /&gt;
alle kriegt man mit&lt;br /&gt;
 set | less&lt;br /&gt;
eine einzelne z.B. mit:&lt;br /&gt;
echo $PATH &lt;br /&gt;
&lt;br /&gt;
==== PATH Variable anpassen ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hinzufügen&amp;#039;&amp;#039;&amp;#039; eines Pfades für eine &amp;#039;&amp;#039;&amp;#039;einzelne&amp;#039;&amp;#039;&amp;#039; Terminal &amp;#039;&amp;#039;&amp;#039;Session&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
 PATH=MeinZusatzPfad:$PATH&lt;br /&gt;
 export PATH&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exportieren&amp;#039;&amp;#039;&amp;#039; ist wichtig wenn die neue Variable auch in &amp;#039;&amp;#039;&amp;#039;Unterterminals&amp;#039;&amp;#039;&amp;#039; zur Verfügung stehen soll (z.B. bei Bash Skripten)&lt;br /&gt;
&lt;br /&gt;
=== Dauerhaft PATH Variable in der Bash setzen ===&lt;br /&gt;
Auf diese Weise stehen die PATH Variable &amp;#039;&amp;#039;&amp;#039;bei jeder Sitzung&amp;#039;&amp;#039;&amp;#039; zur Verfügung. Mac speichert die Bash Datei im Userverzeichnis. &lt;br /&gt;
&lt;br /&gt;
Wir öffnen die bash_profile Datei im Standard Editor (wenn Sie nicht vorhanden ist wird Sie erzeugt).&lt;br /&gt;
 touch ~/.bash_profile; open ~/.bash_profile&lt;br /&gt;
Jetzt können wir die Variable setzen. Hier ein Beispiel mit der Android ADT&lt;br /&gt;
 export PATH=/Users/schlegel/Development/adt-bundle-mac-x86_64/sdk/platform-tools:/Users/schlegel/Development/adt-bundle-mac-x86_64/sdk/tools:$PATH&lt;br /&gt;
&lt;br /&gt;
Durch das :$PATH am Ende wird der neue Wert zu den Standardwerten hinzugefügt oder hier besser vorangestellt)&lt;br /&gt;
&lt;br /&gt;
Jetzt noch die Datei abspeichern und ausführen:&lt;br /&gt;
&lt;br /&gt;
 source ~/.bash_profile&lt;br /&gt;
== Umfangreiches .bash_profile Beispiel ==&lt;br /&gt;
Quelle: http://natelandau.com/my-mac-osx-bash_profile/ (2015-10)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#  ---------------------------------------------------------------------------&lt;br /&gt;
#&lt;br /&gt;
#  Description:  This file holds all my BASH configurations and aliases&lt;br /&gt;
#&lt;br /&gt;
#  Sections:&lt;br /&gt;
#  1.   Environment Configuration&lt;br /&gt;
#  2.   Make Terminal Better (remapping defaults and adding functionality)&lt;br /&gt;
#  3.   File and Folder Management&lt;br /&gt;
#  4.   Searching&lt;br /&gt;
#  5.   Process Management&lt;br /&gt;
#  6.   Networking&lt;br /&gt;
#  7.   System Operations &amp;amp; Information&lt;br /&gt;
#  8.   Web Development&lt;br /&gt;
#  9.   Reminders &amp;amp; Notes&lt;br /&gt;
#&lt;br /&gt;
#  ---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
#   1.  ENVIRONMENT CONFIGURATION&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
&lt;br /&gt;
#   Change Prompt&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export PS1=&amp;quot;________________________________________________________________________________\n| \w @ \h (\u) \n| =&amp;gt; &amp;quot;&lt;br /&gt;
    export PS2=&amp;quot;| =&amp;gt; &amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   Set Paths&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export PATH=&amp;quot;$PATH:/usr/local/bin/&amp;quot;&lt;br /&gt;
    export PATH=&amp;quot;/usr/local/git/bin:/sw/bin/:/usr/local/bin:/usr/local/:/usr/local/sbin:/usr/local/mysql/bin:$PATH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   Set Default Editor (change &amp;#039;Nano&amp;#039; to the editor of your choice)&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export EDITOR=/usr/bin/nano&lt;br /&gt;
&lt;br /&gt;
#   Set default blocksize for ls, df, du&lt;br /&gt;
#   from this: http://hints.macworld.com/comment.php?mode=view&amp;amp;cid=24491&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export BLOCKSIZE=1k&lt;br /&gt;
&lt;br /&gt;
#   Add color to terminal&lt;br /&gt;
#   (this is all commented out as I use Mac Terminal Profiles)&lt;br /&gt;
#   from http://osxdaily.com/2012/02/21/add-color-to-the-terminal-in-mac-os-x/&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
#   export CLICOLOR=1&lt;br /&gt;
#   export LSCOLORS=ExFxBxDxCxegedabagacad&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   -----------------------------&lt;br /&gt;
#   2.  MAKE TERMINAL BETTER&lt;br /&gt;
#   -----------------------------&lt;br /&gt;
&lt;br /&gt;
alias cp=&amp;#039;cp -iv&amp;#039;                           # Preferred &amp;#039;cp&amp;#039; implementation&lt;br /&gt;
alias mv=&amp;#039;mv -iv&amp;#039;                           # Preferred &amp;#039;mv&amp;#039; implementation&lt;br /&gt;
alias mkdir=&amp;#039;mkdir -pv&amp;#039;                     # Preferred &amp;#039;mkdir&amp;#039; implementation&lt;br /&gt;
alias ll=&amp;#039;ls -FGlAhp&amp;#039;                       # Preferred &amp;#039;ls&amp;#039; implementation&lt;br /&gt;
alias less=&amp;#039;less -FSRXc&amp;#039;                    # Preferred &amp;#039;less&amp;#039; implementation&lt;br /&gt;
cd() { builtin cd &amp;quot;$@&amp;quot;; ll; }               # Always list directory contents upon &amp;#039;cd&amp;#039;&lt;br /&gt;
alias cd..=&amp;#039;cd ../&amp;#039;                         # Go back 1 directory level (for fast typers)&lt;br /&gt;
alias ..=&amp;#039;cd ../&amp;#039;                           # Go back 1 directory level&lt;br /&gt;
alias ...=&amp;#039;cd ../../&amp;#039;                       # Go back 2 directory levels&lt;br /&gt;
alias .3=&amp;#039;cd ../../../&amp;#039;                     # Go back 3 directory levels&lt;br /&gt;
alias .4=&amp;#039;cd ../../../../&amp;#039;                  # Go back 4 directory levels&lt;br /&gt;
alias .5=&amp;#039;cd ../../../../../&amp;#039;               # Go back 5 directory levels&lt;br /&gt;
alias .6=&amp;#039;cd ../../../../../../&amp;#039;            # Go back 6 directory levels&lt;br /&gt;
alias edit=&amp;#039;subl&amp;#039;                           # edit:         Opens any file in sublime editor&lt;br /&gt;
alias f=&amp;#039;open -a Finder ./&amp;#039;                 # f:            Opens current directory in MacOS Finder&lt;br /&gt;
alias ~=&amp;quot;cd ~&amp;quot;                              # ~:            Go Home&lt;br /&gt;
alias c=&amp;#039;clear&amp;#039;                             # c:            Clear terminal display&lt;br /&gt;
alias which=&amp;#039;type -all&amp;#039;                     # which:        Find executables&lt;br /&gt;
alias path=&amp;#039;echo -e ${PATH//:/\\n}&amp;#039;         # path:         Echo all executable Paths&lt;br /&gt;
alias show_options=&amp;#039;shopt&amp;#039;                  # Show_options: display bash options settings&lt;br /&gt;
alias fix_stty=&amp;#039;stty sane&amp;#039;                  # fix_stty:     Restore terminal settings when screwed up&lt;br /&gt;
alias cic=&amp;#039;set completion-ignore-case On&amp;#039;   # cic:          Make tab-completion case-insensitive&lt;br /&gt;
mcd () { mkdir -p &amp;quot;$1&amp;quot; &amp;amp;&amp;amp; cd &amp;quot;$1&amp;quot;; }        # mcd:          Makes new Dir and jumps inside&lt;br /&gt;
trash () { command mv &amp;quot;$@&amp;quot; ~/.Trash ; }     # trash:        Moves a file to the MacOS trash&lt;br /&gt;
ql () { qlmanage -p &amp;quot;$*&amp;quot; &amp;gt;&amp;amp; /dev/null; }    # ql:           Opens any file in MacOS Quicklook Preview&lt;br /&gt;
alias DT=&amp;#039;tee ~/Desktop/terminalOut.txt&amp;#039;    # DT:           Pipe content to file on MacOS Desktop&lt;br /&gt;
&lt;br /&gt;
#   lr:  Full Recursive Directory Listing&lt;br /&gt;
#   ------------------------------------------&lt;br /&gt;
alias lr=&amp;#039;ls -R | grep &amp;quot;:$&amp;quot; | sed -e &amp;#039;\&amp;#039;&amp;#039;s/:$//&amp;#039;\&amp;#039;&amp;#039; -e &amp;#039;\&amp;#039;&amp;#039;s/[^-][^\/]*\//--/g&amp;#039;\&amp;#039;&amp;#039; -e &amp;#039;\&amp;#039;&amp;#039;s/^/   /&amp;#039;\&amp;#039;&amp;#039; -e &amp;#039;\&amp;#039;&amp;#039;s/-/|/&amp;#039;\&amp;#039;&amp;#039; | less&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   mans:   Search manpage given in agument &amp;#039;1&amp;#039; for term given in argument &amp;#039;2&amp;#039; (case insensitive)&lt;br /&gt;
#           displays paginated result with colored search terms and two lines surrounding each hit.             Example: mans mplayer codec&lt;br /&gt;
#   --------------------------------------------------------------------&lt;br /&gt;
    mans () {&lt;br /&gt;
        man $1 | grep -iC2 --color=always $2 | less&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
#   showa: to remind yourself of an alias (given some part of it)&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    showa () { /usr/bin/grep --color=always -i -a1 $@ ~/Library/init/bash/aliases.bash | grep -v &amp;#039;^\s*$&amp;#039; | less -FSRXc ; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
#   3.  FILE AND FOLDER MANAGEMENT&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
&lt;br /&gt;
zipf () { zip -r &amp;quot;$1&amp;quot;.zip &amp;quot;$1&amp;quot; ; }          # zipf:         To create a ZIP archive of a folder&lt;br /&gt;
alias numFiles=&amp;#039;echo $(ls -1 | wc -l)&amp;#039;      # numFiles:     Count of non-hidden files in current dir&lt;br /&gt;
alias make1mb=&amp;#039;mkfile 1m ./1MB.dat&amp;#039;         # make1mb:      Creates a file of 1mb size (all zeros)&lt;br /&gt;
alias make5mb=&amp;#039;mkfile 5m ./5MB.dat&amp;#039;         # make5mb:      Creates a file of 5mb size (all zeros)&lt;br /&gt;
alias make10mb=&amp;#039;mkfile 10m ./10MB.dat&amp;#039;      # make10mb:     Creates a file of 10mb size (all zeros)&lt;br /&gt;
&lt;br /&gt;
#   cdf:  &amp;#039;Cd&amp;#039;s to frontmost window of MacOS Finder&lt;br /&gt;
#   ------------------------------------------------------&lt;br /&gt;
    cdf () {&lt;br /&gt;
        currFolderPath=$( /usr/bin/osascript &amp;lt;&amp;lt;EOT&lt;br /&gt;
            tell application &amp;quot;Finder&amp;quot;&lt;br /&gt;
                try&lt;br /&gt;
            set currFolder to (folder of the front window as alias)&lt;br /&gt;
                on error&lt;br /&gt;
            set currFolder to (path to desktop folder as alias)&lt;br /&gt;
                end try&lt;br /&gt;
                POSIX path of currFolder&lt;br /&gt;
            end tell&lt;br /&gt;
EOT&lt;br /&gt;
        )&lt;br /&gt;
        echo &amp;quot;cd to \&amp;quot;$currFolderPath\&amp;quot;&amp;quot;&lt;br /&gt;
        cd &amp;quot;$currFolderPath&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
#   extract:  Extract most know archives with one command&lt;br /&gt;
#   ---------------------------------------------------------&lt;br /&gt;
    extract () {&lt;br /&gt;
        if [ -f $1 ] ; then&lt;br /&gt;
          case $1 in&lt;br /&gt;
            *.tar.bz2)   tar xjf $1     ;;&lt;br /&gt;
            *.tar.gz)    tar xzf $1     ;;&lt;br /&gt;
            *.bz2)       bunzip2 $1     ;;&lt;br /&gt;
            *.rar)       unrar e $1     ;;&lt;br /&gt;
            *.gz)        gunzip $1      ;;&lt;br /&gt;
            *.tar)       tar xf $1      ;;&lt;br /&gt;
            *.tbz2)      tar xjf $1     ;;&lt;br /&gt;
            *.tgz)       tar xzf $1     ;;&lt;br /&gt;
            *.zip)       unzip $1       ;;&lt;br /&gt;
            *.Z)         uncompress $1  ;;&lt;br /&gt;
            *.7z)        7z x $1        ;;&lt;br /&gt;
            *)     echo &amp;quot;&amp;#039;$1&amp;#039; cannot be extracted via extract()&amp;quot; ;;&lt;br /&gt;
             esac&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;&amp;#039;$1&amp;#039; is not a valid file&amp;quot;&lt;br /&gt;
         fi&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
#   4.  SEARCHING&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
&lt;br /&gt;
alias qfind=&amp;quot;find . -name &amp;quot;                 # qfind:    Quickly search for file&lt;br /&gt;
ff () { /usr/bin/find . -name &amp;quot;$@&amp;quot; ; }      # ff:       Find file under the current directory&lt;br /&gt;
ffs () { /usr/bin/find . -name &amp;quot;$@&amp;quot;&amp;#039;*&amp;#039; ; }  # ffs:      Find file whose name starts with a given string&lt;br /&gt;
ffe () { /usr/bin/find . -name &amp;#039;*&amp;#039;&amp;quot;$@&amp;quot; ; }  # ffe:      Find file whose name ends with a given string&lt;br /&gt;
&lt;br /&gt;
#   spotlight: Search for a file using MacOS Spotlight&amp;#039;s metadata&lt;br /&gt;
#   -----------------------------------------------------------&lt;br /&gt;
    spotlight () { mdfind &amp;quot;kMDItemDisplayName == &amp;#039;$@&amp;#039;wc&amp;quot;; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
#   5.  PROCESS MANAGEMENT&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
&lt;br /&gt;
#   findPid: find out the pid of a specified process&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
#       Note that the command name can be specified via a regex&lt;br /&gt;
#       E.g. findPid &amp;#039;/d$/&amp;#039; finds pids of all processes with names ending in &amp;#039;d&amp;#039;&lt;br /&gt;
#       Without the &amp;#039;sudo&amp;#039; it will only find processes of the current user&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    findPid () { lsof -t -c &amp;quot;$@&amp;quot; ; }&lt;br /&gt;
&lt;br /&gt;
#   memHogsTop, memHogsPs:  Find memory hogs&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    alias memHogsTop=&amp;#039;top -l 1 -o rsize | head -20&amp;#039;&lt;br /&gt;
    alias memHogsPs=&amp;#039;ps wwaxm -o pid,stat,vsize,rss,time,command | head -10&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   cpuHogs:  Find CPU hogs&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    alias cpu_hogs=&amp;#039;ps wwaxr -o pid,stat,%cpu,time,command | head -10&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   topForever:  Continual &amp;#039;top&amp;#039; listing (every 10 seconds)&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    alias topForever=&amp;#039;top -l 9999999 -s 10 -o cpu&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   ttop:  Recommended &amp;#039;top&amp;#039; invocation to minimize resources&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
#       Taken from this macosxhints article&lt;br /&gt;
#       http://www.macosxhints.com/article.php?story=20060816123853639&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    alias ttop=&amp;quot;top -R -F -s 10 -o rsize&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   my_ps: List processes owned by my user:&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    my_ps() { ps $@ -u $USER -o pid,%cpu,%mem,start,time,bsdtime,command ; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
#   6.  NETWORKING&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
&lt;br /&gt;
alias myip=&amp;#039;curl ip.appspot.com&amp;#039;                    # myip:         Public facing IP Address&lt;br /&gt;
alias netCons=&amp;#039;lsof -i&amp;#039;                             # netCons:      Show all open TCP/IP sockets&lt;br /&gt;
alias flushDNS=&amp;#039;dscacheutil -flushcache&amp;#039;            # flushDNS:     Flush out the DNS Cache&lt;br /&gt;
alias lsock=&amp;#039;sudo /usr/sbin/lsof -i -P&amp;#039;             # lsock:        Display open sockets&lt;br /&gt;
alias lsockU=&amp;#039;sudo /usr/sbin/lsof -nP | grep UDP&amp;#039;   # lsockU:       Display only open UDP sockets&lt;br /&gt;
alias lsockT=&amp;#039;sudo /usr/sbin/lsof -nP | grep TCP&amp;#039;   # lsockT:       Display only open TCP sockets&lt;br /&gt;
alias ipInfo0=&amp;#039;ipconfig getpacket en0&amp;#039;              # ipInfo0:      Get info on connections for en0&lt;br /&gt;
alias ipInfo1=&amp;#039;ipconfig getpacket en1&amp;#039;              # ipInfo1:      Get info on connections for en1&lt;br /&gt;
alias openPorts=&amp;#039;sudo lsof -i | grep LISTEN&amp;#039;        # openPorts:    All listening connections&lt;br /&gt;
alias showBlocked=&amp;#039;sudo ipfw list&amp;#039;                  # showBlocked:  All ipfw rules inc/ blocked IPs&lt;br /&gt;
&lt;br /&gt;
#   ii:  display useful host related informaton&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    ii() {&lt;br /&gt;
        echo -e &amp;quot;\nYou are logged on ${RED}$HOST&amp;quot;&lt;br /&gt;
        echo -e &amp;quot;\nAdditionnal information:$NC &amp;quot; ; uname -a&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Users logged on:$NC &amp;quot; ; w -h&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Current date :$NC &amp;quot; ; date&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Machine stats :$NC &amp;quot; ; uptime&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Current network location :$NC &amp;quot; ; scselect&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Public facing IP Address :$NC &amp;quot; ;myip&lt;br /&gt;
        #echo -e &amp;quot;\n${RED}DNS Configuration:$NC &amp;quot; ; scutil --dns&lt;br /&gt;
        echo&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   7.  SYSTEMS OPERATIONS &amp;amp; INFORMATION&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
&lt;br /&gt;
alias mountReadWrite=&amp;#039;/sbin/mount -uw /&amp;#039;    # mountReadWrite:   For use when booted into single-user&lt;br /&gt;
&lt;br /&gt;
#   cleanupDS:  Recursively delete .DS_Store files&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    alias cleanupDS=&amp;quot;find . -type f -name &amp;#039;*.DS_Store&amp;#039; -ls -delete&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   finderShowHidden:   Show hidden files in Finder&lt;br /&gt;
#   finderHideHidden:   Hide hidden files in Finder&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    alias finderShowHidden=&amp;#039;defaults write com.apple.finder ShowAllFiles TRUE&amp;#039;&lt;br /&gt;
    alias finderHideHidden=&amp;#039;defaults write com.apple.finder ShowAllFiles FALSE&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   cleanupLS:  Clean up LaunchServices to remove duplicates in the &amp;quot;Open With&amp;quot; menu&lt;br /&gt;
#   -----------------------------------------------------------------------------------&lt;br /&gt;
    alias cleanupLS=&amp;quot;/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user &amp;amp;&amp;amp; killall Finder&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#    screensaverDesktop: Run a screensaver on the Desktop&lt;br /&gt;
#   -----------------------------------------------------------------------------------&lt;br /&gt;
    alias screensaverDesktop=&amp;#039;/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   8.  WEB DEVELOPMENT&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
&lt;br /&gt;
alias apacheEdit=&amp;#039;sudo edit /etc/httpd/httpd.conf&amp;#039;      # apacheEdit:       Edit httpd.conf&lt;br /&gt;
alias apacheRestart=&amp;#039;sudo apachectl graceful&amp;#039;           # apacheRestart:    Restart Apache&lt;br /&gt;
alias editHosts=&amp;#039;sudo edit /etc/hosts&amp;#039;                  # editHosts:        Edit /etc/hosts file&lt;br /&gt;
alias herr=&amp;#039;tail /var/log/httpd/error_log&amp;#039;              # herr:             Tails HTTP error logs&lt;br /&gt;
alias apacheLogs=&amp;quot;less +F /var/log/apache2/error_log&amp;quot;   # Apachelogs:   Shows apache error logs&lt;br /&gt;
httpHeaders () { /usr/bin/curl -I -L $@ ; }             # httpHeaders:      Grabs headers from web page&lt;br /&gt;
&lt;br /&gt;
#   httpDebug:  Download a web page and show info on what took time&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    httpDebug () { /usr/bin/curl $@ -o /dev/null -w &amp;quot;dns: %{time_namelookup} connect: %{time_connect} pretransfer: %{time_pretransfer} starttransfer: %{time_starttransfer} total: %{time_total}\n&amp;quot; ; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   9.  REMINDERS &amp;amp; NOTES&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
&lt;br /&gt;
#   remove_disk: spin down unneeded disk&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   diskutil eject /dev/disk1s3&lt;br /&gt;
&lt;br /&gt;
#   to change the password on an encrypted disk image:&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   hdiutil chpass /path/to/the/diskimage&lt;br /&gt;
&lt;br /&gt;
#   to mount a read-only disk image as read-write:&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   hdiutil attach example.dmg -shadow /tmp/example.shadow -noverify&lt;br /&gt;
&lt;br /&gt;
#   mounting a removable drive (of type msdos or hfs)&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   mkdir /Volumes/Foo&lt;br /&gt;
#   ls /dev/disk*   to find out the device to use in the mount command)&lt;br /&gt;
#   mount -t msdos /dev/disk1s1 /Volumes/Foo&lt;br /&gt;
#   mount -t hfs /dev/disk1s1 /Volumes/Foo&lt;br /&gt;
&lt;br /&gt;
#   to create a file of a given size: /usr/sbin/mkfile or /usr/bin/hdiutil&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   e.g.: mkfile 10m 10MB.dat&lt;br /&gt;
#   e.g.: hdiutil create -size 10m 10MB.dmg&lt;br /&gt;
#   the above create files that are almost all zeros - if random bytes are desired&lt;br /&gt;
#   then use: ~/Dev/Perl/randBytes 1048576 &amp;gt; 10MB.dat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipps und Tricks ==&lt;br /&gt;
=== Mit Terminal auf externe Festplatte zugreifen ===&lt;br /&gt;
 /Volumes&lt;br /&gt;
=== Dateien kopieren, bewegen, umbenennen ===&lt;br /&gt;
 https://www.macworld.com/article/222558/macos-command-line-copying-moving-files-terminal.html&lt;br /&gt;
&lt;br /&gt;
 cp source.txt target.txt&lt;br /&gt;
 cp -R sourceFolder/ /Volumes/backupDrive/myBackupFolder&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Terminal_und_Konsole_auf_dem_Mac&amp;diff=25402</id>
		<title>Terminal und Konsole auf dem Mac</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Terminal_und_Konsole_auf_dem_Mac&amp;diff=25402"/>
		<updated>2021-09-20T16:20:26Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: /* Einleitung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tips für die Arbeit mit dem Terminal&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Das Erscheinungsbild des Terminals kann man einfach Verbessern. Dazu kann man z.B. im Home-Directory die Dateien &amp;#039;&amp;#039;&amp;#039;.bash_profile&amp;#039;&amp;#039;&amp;#039; or &amp;#039;&amp;#039;&amp;#039;.bashrc&amp;#039;&amp;#039;&amp;#039; anpassen. Aber auch die &amp;#039;&amp;#039;&amp;#039;.profile&amp;#039;&amp;#039;&amp;#039; Datei Funktioniert. Je nachdem ob man die User Dateien oder die Globalen nimmt wird die Änderung global oder auf User-Ebene umgesetzt. Wenn die Dateien nicht vorhanden sind einfach hinzufügen.&lt;br /&gt;
&lt;br /&gt;
== Quickstart ==&lt;br /&gt;
=== Datei schreiben ===&lt;br /&gt;
 https://support.apple.com/de-de/guide/terminal/apd53500956-7c5b-496b-a362-2845f2aab4bc/2.11/mac/11.0&lt;br /&gt;
=== Datei ausführbar machen und ausführen ===&lt;br /&gt;
 cd YourScriptDirectory&lt;br /&gt;
Gib den Befehl chmod ein. Zum Beispiel:&lt;br /&gt;
 % chmod 755 YourScriptName.sh&lt;br /&gt;
&lt;br /&gt;
Nachdem du aus der Shell-Skript-Datei eine ausführbare Datei gemacht hast, kannst du diese durch Eingeben des Pfadnamens ausführen. Zum Beispiel:&lt;br /&gt;
 % ~/Documents/Dev/YourScriptName.sh&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
 % cd ~/Documents/Dev/ &lt;br /&gt;
 % ./YourScriptName.sh&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
=== zsh shell statt bash ab Catalina ===&lt;br /&gt;
https://support.apple.com/de-de/HT208050&lt;br /&gt;
== Prompt anpassen ==&lt;br /&gt;
Wie oben beschrieben z.B. in die .bash_profile datei&lt;br /&gt;
&amp;#039;&amp;#039;Farbiges&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;Prompt&amp;#039;&amp;#039;&amp;#039; und Anzeige als: &amp;#039;&amp;#039;“username@hostname:cwd $”&amp;#039;&amp;#039;&lt;br /&gt;
 export PS1=&amp;quot;\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ &amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Farben auf Mac Terminal ==&lt;br /&gt;
 export CLICOLOR=1&lt;br /&gt;
 export LSCOLORS=GxFxCxDxBxegedabagaced&lt;br /&gt;
&lt;br /&gt;
CLICOLOR=1 bedeutet Farbe anschalten&lt;br /&gt;
LSCOLORS= Farben für die anzeige im Listkommando&lt;br /&gt;
== Mac UNIX ==&lt;br /&gt;
Basiert auf UNIX&lt;br /&gt;
&lt;br /&gt;
Apfel &amp;gt; Über diesen Mac &amp;gt; Software (da steht z.B. die kernel Version)&lt;br /&gt;
&lt;br /&gt;
== Umgebungsvariablen, PATH Variable etc.== &lt;br /&gt;
siehe auch: http://wiki.zone30.info/wikizone/index.php/Linux_-_Umgebungsvariable&lt;br /&gt;
&lt;br /&gt;
alle kriegt man mit&lt;br /&gt;
 set | less&lt;br /&gt;
eine einzelne z.B. mit:&lt;br /&gt;
echo $PATH &lt;br /&gt;
&lt;br /&gt;
==== PATH Variable anpassen ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hinzufügen&amp;#039;&amp;#039;&amp;#039; eines Pfades für eine &amp;#039;&amp;#039;&amp;#039;einzelne&amp;#039;&amp;#039;&amp;#039; Terminal &amp;#039;&amp;#039;&amp;#039;Session&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
 PATH=MeinZusatzPfad:$PATH&lt;br /&gt;
 export PATH&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exportieren&amp;#039;&amp;#039;&amp;#039; ist wichtig wenn die neue Variable auch in &amp;#039;&amp;#039;&amp;#039;Unterterminals&amp;#039;&amp;#039;&amp;#039; zur Verfügung stehen soll (z.B. bei Bash Skripten)&lt;br /&gt;
&lt;br /&gt;
=== Dauerhaft PATH Variable in der Bash setzen ===&lt;br /&gt;
Auf diese Weise stehen die PATH Variable &amp;#039;&amp;#039;&amp;#039;bei jeder Sitzung&amp;#039;&amp;#039;&amp;#039; zur Verfügung. Mac speichert die Bash Datei im Userverzeichnis. &lt;br /&gt;
&lt;br /&gt;
Wir öffnen die bash_profile Datei im Standard Editor (wenn Sie nicht vorhanden ist wird Sie erzeugt).&lt;br /&gt;
 touch ~/.bash_profile; open ~/.bash_profile&lt;br /&gt;
Jetzt können wir die Variable setzen. Hier ein Beispiel mit der Android ADT&lt;br /&gt;
 export PATH=/Users/schlegel/Development/adt-bundle-mac-x86_64/sdk/platform-tools:/Users/schlegel/Development/adt-bundle-mac-x86_64/sdk/tools:$PATH&lt;br /&gt;
&lt;br /&gt;
Durch das :$PATH am Ende wird der neue Wert zu den Standardwerten hinzugefügt oder hier besser vorangestellt)&lt;br /&gt;
&lt;br /&gt;
Jetzt noch die Datei abspeichern und ausführen:&lt;br /&gt;
&lt;br /&gt;
 source ~/.bash_profile&lt;br /&gt;
== Umfangreiches .bash_profile Beispiel ==&lt;br /&gt;
Quelle: http://natelandau.com/my-mac-osx-bash_profile/ (2015-10)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#  ---------------------------------------------------------------------------&lt;br /&gt;
#&lt;br /&gt;
#  Description:  This file holds all my BASH configurations and aliases&lt;br /&gt;
#&lt;br /&gt;
#  Sections:&lt;br /&gt;
#  1.   Environment Configuration&lt;br /&gt;
#  2.   Make Terminal Better (remapping defaults and adding functionality)&lt;br /&gt;
#  3.   File and Folder Management&lt;br /&gt;
#  4.   Searching&lt;br /&gt;
#  5.   Process Management&lt;br /&gt;
#  6.   Networking&lt;br /&gt;
#  7.   System Operations &amp;amp; Information&lt;br /&gt;
#  8.   Web Development&lt;br /&gt;
#  9.   Reminders &amp;amp; Notes&lt;br /&gt;
#&lt;br /&gt;
#  ---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
#   1.  ENVIRONMENT CONFIGURATION&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
&lt;br /&gt;
#   Change Prompt&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export PS1=&amp;quot;________________________________________________________________________________\n| \w @ \h (\u) \n| =&amp;gt; &amp;quot;&lt;br /&gt;
    export PS2=&amp;quot;| =&amp;gt; &amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   Set Paths&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export PATH=&amp;quot;$PATH:/usr/local/bin/&amp;quot;&lt;br /&gt;
    export PATH=&amp;quot;/usr/local/git/bin:/sw/bin/:/usr/local/bin:/usr/local/:/usr/local/sbin:/usr/local/mysql/bin:$PATH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   Set Default Editor (change &amp;#039;Nano&amp;#039; to the editor of your choice)&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export EDITOR=/usr/bin/nano&lt;br /&gt;
&lt;br /&gt;
#   Set default blocksize for ls, df, du&lt;br /&gt;
#   from this: http://hints.macworld.com/comment.php?mode=view&amp;amp;cid=24491&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export BLOCKSIZE=1k&lt;br /&gt;
&lt;br /&gt;
#   Add color to terminal&lt;br /&gt;
#   (this is all commented out as I use Mac Terminal Profiles)&lt;br /&gt;
#   from http://osxdaily.com/2012/02/21/add-color-to-the-terminal-in-mac-os-x/&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
#   export CLICOLOR=1&lt;br /&gt;
#   export LSCOLORS=ExFxBxDxCxegedabagacad&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   -----------------------------&lt;br /&gt;
#   2.  MAKE TERMINAL BETTER&lt;br /&gt;
#   -----------------------------&lt;br /&gt;
&lt;br /&gt;
alias cp=&amp;#039;cp -iv&amp;#039;                           # Preferred &amp;#039;cp&amp;#039; implementation&lt;br /&gt;
alias mv=&amp;#039;mv -iv&amp;#039;                           # Preferred &amp;#039;mv&amp;#039; implementation&lt;br /&gt;
alias mkdir=&amp;#039;mkdir -pv&amp;#039;                     # Preferred &amp;#039;mkdir&amp;#039; implementation&lt;br /&gt;
alias ll=&amp;#039;ls -FGlAhp&amp;#039;                       # Preferred &amp;#039;ls&amp;#039; implementation&lt;br /&gt;
alias less=&amp;#039;less -FSRXc&amp;#039;                    # Preferred &amp;#039;less&amp;#039; implementation&lt;br /&gt;
cd() { builtin cd &amp;quot;$@&amp;quot;; ll; }               # Always list directory contents upon &amp;#039;cd&amp;#039;&lt;br /&gt;
alias cd..=&amp;#039;cd ../&amp;#039;                         # Go back 1 directory level (for fast typers)&lt;br /&gt;
alias ..=&amp;#039;cd ../&amp;#039;                           # Go back 1 directory level&lt;br /&gt;
alias ...=&amp;#039;cd ../../&amp;#039;                       # Go back 2 directory levels&lt;br /&gt;
alias .3=&amp;#039;cd ../../../&amp;#039;                     # Go back 3 directory levels&lt;br /&gt;
alias .4=&amp;#039;cd ../../../../&amp;#039;                  # Go back 4 directory levels&lt;br /&gt;
alias .5=&amp;#039;cd ../../../../../&amp;#039;               # Go back 5 directory levels&lt;br /&gt;
alias .6=&amp;#039;cd ../../../../../../&amp;#039;            # Go back 6 directory levels&lt;br /&gt;
alias edit=&amp;#039;subl&amp;#039;                           # edit:         Opens any file in sublime editor&lt;br /&gt;
alias f=&amp;#039;open -a Finder ./&amp;#039;                 # f:            Opens current directory in MacOS Finder&lt;br /&gt;
alias ~=&amp;quot;cd ~&amp;quot;                              # ~:            Go Home&lt;br /&gt;
alias c=&amp;#039;clear&amp;#039;                             # c:            Clear terminal display&lt;br /&gt;
alias which=&amp;#039;type -all&amp;#039;                     # which:        Find executables&lt;br /&gt;
alias path=&amp;#039;echo -e ${PATH//:/\\n}&amp;#039;         # path:         Echo all executable Paths&lt;br /&gt;
alias show_options=&amp;#039;shopt&amp;#039;                  # Show_options: display bash options settings&lt;br /&gt;
alias fix_stty=&amp;#039;stty sane&amp;#039;                  # fix_stty:     Restore terminal settings when screwed up&lt;br /&gt;
alias cic=&amp;#039;set completion-ignore-case On&amp;#039;   # cic:          Make tab-completion case-insensitive&lt;br /&gt;
mcd () { mkdir -p &amp;quot;$1&amp;quot; &amp;amp;&amp;amp; cd &amp;quot;$1&amp;quot;; }        # mcd:          Makes new Dir and jumps inside&lt;br /&gt;
trash () { command mv &amp;quot;$@&amp;quot; ~/.Trash ; }     # trash:        Moves a file to the MacOS trash&lt;br /&gt;
ql () { qlmanage -p &amp;quot;$*&amp;quot; &amp;gt;&amp;amp; /dev/null; }    # ql:           Opens any file in MacOS Quicklook Preview&lt;br /&gt;
alias DT=&amp;#039;tee ~/Desktop/terminalOut.txt&amp;#039;    # DT:           Pipe content to file on MacOS Desktop&lt;br /&gt;
&lt;br /&gt;
#   lr:  Full Recursive Directory Listing&lt;br /&gt;
#   ------------------------------------------&lt;br /&gt;
alias lr=&amp;#039;ls -R | grep &amp;quot;:$&amp;quot; | sed -e &amp;#039;\&amp;#039;&amp;#039;s/:$//&amp;#039;\&amp;#039;&amp;#039; -e &amp;#039;\&amp;#039;&amp;#039;s/[^-][^\/]*\//--/g&amp;#039;\&amp;#039;&amp;#039; -e &amp;#039;\&amp;#039;&amp;#039;s/^/   /&amp;#039;\&amp;#039;&amp;#039; -e &amp;#039;\&amp;#039;&amp;#039;s/-/|/&amp;#039;\&amp;#039;&amp;#039; | less&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   mans:   Search manpage given in agument &amp;#039;1&amp;#039; for term given in argument &amp;#039;2&amp;#039; (case insensitive)&lt;br /&gt;
#           displays paginated result with colored search terms and two lines surrounding each hit.             Example: mans mplayer codec&lt;br /&gt;
#   --------------------------------------------------------------------&lt;br /&gt;
    mans () {&lt;br /&gt;
        man $1 | grep -iC2 --color=always $2 | less&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
#   showa: to remind yourself of an alias (given some part of it)&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    showa () { /usr/bin/grep --color=always -i -a1 $@ ~/Library/init/bash/aliases.bash | grep -v &amp;#039;^\s*$&amp;#039; | less -FSRXc ; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
#   3.  FILE AND FOLDER MANAGEMENT&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
&lt;br /&gt;
zipf () { zip -r &amp;quot;$1&amp;quot;.zip &amp;quot;$1&amp;quot; ; }          # zipf:         To create a ZIP archive of a folder&lt;br /&gt;
alias numFiles=&amp;#039;echo $(ls -1 | wc -l)&amp;#039;      # numFiles:     Count of non-hidden files in current dir&lt;br /&gt;
alias make1mb=&amp;#039;mkfile 1m ./1MB.dat&amp;#039;         # make1mb:      Creates a file of 1mb size (all zeros)&lt;br /&gt;
alias make5mb=&amp;#039;mkfile 5m ./5MB.dat&amp;#039;         # make5mb:      Creates a file of 5mb size (all zeros)&lt;br /&gt;
alias make10mb=&amp;#039;mkfile 10m ./10MB.dat&amp;#039;      # make10mb:     Creates a file of 10mb size (all zeros)&lt;br /&gt;
&lt;br /&gt;
#   cdf:  &amp;#039;Cd&amp;#039;s to frontmost window of MacOS Finder&lt;br /&gt;
#   ------------------------------------------------------&lt;br /&gt;
    cdf () {&lt;br /&gt;
        currFolderPath=$( /usr/bin/osascript &amp;lt;&amp;lt;EOT&lt;br /&gt;
            tell application &amp;quot;Finder&amp;quot;&lt;br /&gt;
                try&lt;br /&gt;
            set currFolder to (folder of the front window as alias)&lt;br /&gt;
                on error&lt;br /&gt;
            set currFolder to (path to desktop folder as alias)&lt;br /&gt;
                end try&lt;br /&gt;
                POSIX path of currFolder&lt;br /&gt;
            end tell&lt;br /&gt;
EOT&lt;br /&gt;
        )&lt;br /&gt;
        echo &amp;quot;cd to \&amp;quot;$currFolderPath\&amp;quot;&amp;quot;&lt;br /&gt;
        cd &amp;quot;$currFolderPath&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
#   extract:  Extract most know archives with one command&lt;br /&gt;
#   ---------------------------------------------------------&lt;br /&gt;
    extract () {&lt;br /&gt;
        if [ -f $1 ] ; then&lt;br /&gt;
          case $1 in&lt;br /&gt;
            *.tar.bz2)   tar xjf $1     ;;&lt;br /&gt;
            *.tar.gz)    tar xzf $1     ;;&lt;br /&gt;
            *.bz2)       bunzip2 $1     ;;&lt;br /&gt;
            *.rar)       unrar e $1     ;;&lt;br /&gt;
            *.gz)        gunzip $1      ;;&lt;br /&gt;
            *.tar)       tar xf $1      ;;&lt;br /&gt;
            *.tbz2)      tar xjf $1     ;;&lt;br /&gt;
            *.tgz)       tar xzf $1     ;;&lt;br /&gt;
            *.zip)       unzip $1       ;;&lt;br /&gt;
            *.Z)         uncompress $1  ;;&lt;br /&gt;
            *.7z)        7z x $1        ;;&lt;br /&gt;
            *)     echo &amp;quot;&amp;#039;$1&amp;#039; cannot be extracted via extract()&amp;quot; ;;&lt;br /&gt;
             esac&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;&amp;#039;$1&amp;#039; is not a valid file&amp;quot;&lt;br /&gt;
         fi&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
#   4.  SEARCHING&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
&lt;br /&gt;
alias qfind=&amp;quot;find . -name &amp;quot;                 # qfind:    Quickly search for file&lt;br /&gt;
ff () { /usr/bin/find . -name &amp;quot;$@&amp;quot; ; }      # ff:       Find file under the current directory&lt;br /&gt;
ffs () { /usr/bin/find . -name &amp;quot;$@&amp;quot;&amp;#039;*&amp;#039; ; }  # ffs:      Find file whose name starts with a given string&lt;br /&gt;
ffe () { /usr/bin/find . -name &amp;#039;*&amp;#039;&amp;quot;$@&amp;quot; ; }  # ffe:      Find file whose name ends with a given string&lt;br /&gt;
&lt;br /&gt;
#   spotlight: Search for a file using MacOS Spotlight&amp;#039;s metadata&lt;br /&gt;
#   -----------------------------------------------------------&lt;br /&gt;
    spotlight () { mdfind &amp;quot;kMDItemDisplayName == &amp;#039;$@&amp;#039;wc&amp;quot;; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
#   5.  PROCESS MANAGEMENT&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
&lt;br /&gt;
#   findPid: find out the pid of a specified process&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
#       Note that the command name can be specified via a regex&lt;br /&gt;
#       E.g. findPid &amp;#039;/d$/&amp;#039; finds pids of all processes with names ending in &amp;#039;d&amp;#039;&lt;br /&gt;
#       Without the &amp;#039;sudo&amp;#039; it will only find processes of the current user&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    findPid () { lsof -t -c &amp;quot;$@&amp;quot; ; }&lt;br /&gt;
&lt;br /&gt;
#   memHogsTop, memHogsPs:  Find memory hogs&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    alias memHogsTop=&amp;#039;top -l 1 -o rsize | head -20&amp;#039;&lt;br /&gt;
    alias memHogsPs=&amp;#039;ps wwaxm -o pid,stat,vsize,rss,time,command | head -10&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   cpuHogs:  Find CPU hogs&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    alias cpu_hogs=&amp;#039;ps wwaxr -o pid,stat,%cpu,time,command | head -10&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   topForever:  Continual &amp;#039;top&amp;#039; listing (every 10 seconds)&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    alias topForever=&amp;#039;top -l 9999999 -s 10 -o cpu&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   ttop:  Recommended &amp;#039;top&amp;#039; invocation to minimize resources&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
#       Taken from this macosxhints article&lt;br /&gt;
#       http://www.macosxhints.com/article.php?story=20060816123853639&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    alias ttop=&amp;quot;top -R -F -s 10 -o rsize&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   my_ps: List processes owned by my user:&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    my_ps() { ps $@ -u $USER -o pid,%cpu,%mem,start,time,bsdtime,command ; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
#   6.  NETWORKING&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
&lt;br /&gt;
alias myip=&amp;#039;curl ip.appspot.com&amp;#039;                    # myip:         Public facing IP Address&lt;br /&gt;
alias netCons=&amp;#039;lsof -i&amp;#039;                             # netCons:      Show all open TCP/IP sockets&lt;br /&gt;
alias flushDNS=&amp;#039;dscacheutil -flushcache&amp;#039;            # flushDNS:     Flush out the DNS Cache&lt;br /&gt;
alias lsock=&amp;#039;sudo /usr/sbin/lsof -i -P&amp;#039;             # lsock:        Display open sockets&lt;br /&gt;
alias lsockU=&amp;#039;sudo /usr/sbin/lsof -nP | grep UDP&amp;#039;   # lsockU:       Display only open UDP sockets&lt;br /&gt;
alias lsockT=&amp;#039;sudo /usr/sbin/lsof -nP | grep TCP&amp;#039;   # lsockT:       Display only open TCP sockets&lt;br /&gt;
alias ipInfo0=&amp;#039;ipconfig getpacket en0&amp;#039;              # ipInfo0:      Get info on connections for en0&lt;br /&gt;
alias ipInfo1=&amp;#039;ipconfig getpacket en1&amp;#039;              # ipInfo1:      Get info on connections for en1&lt;br /&gt;
alias openPorts=&amp;#039;sudo lsof -i | grep LISTEN&amp;#039;        # openPorts:    All listening connections&lt;br /&gt;
alias showBlocked=&amp;#039;sudo ipfw list&amp;#039;                  # showBlocked:  All ipfw rules inc/ blocked IPs&lt;br /&gt;
&lt;br /&gt;
#   ii:  display useful host related informaton&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    ii() {&lt;br /&gt;
        echo -e &amp;quot;\nYou are logged on ${RED}$HOST&amp;quot;&lt;br /&gt;
        echo -e &amp;quot;\nAdditionnal information:$NC &amp;quot; ; uname -a&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Users logged on:$NC &amp;quot; ; w -h&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Current date :$NC &amp;quot; ; date&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Machine stats :$NC &amp;quot; ; uptime&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Current network location :$NC &amp;quot; ; scselect&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Public facing IP Address :$NC &amp;quot; ;myip&lt;br /&gt;
        #echo -e &amp;quot;\n${RED}DNS Configuration:$NC &amp;quot; ; scutil --dns&lt;br /&gt;
        echo&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   7.  SYSTEMS OPERATIONS &amp;amp; INFORMATION&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
&lt;br /&gt;
alias mountReadWrite=&amp;#039;/sbin/mount -uw /&amp;#039;    # mountReadWrite:   For use when booted into single-user&lt;br /&gt;
&lt;br /&gt;
#   cleanupDS:  Recursively delete .DS_Store files&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    alias cleanupDS=&amp;quot;find . -type f -name &amp;#039;*.DS_Store&amp;#039; -ls -delete&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   finderShowHidden:   Show hidden files in Finder&lt;br /&gt;
#   finderHideHidden:   Hide hidden files in Finder&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    alias finderShowHidden=&amp;#039;defaults write com.apple.finder ShowAllFiles TRUE&amp;#039;&lt;br /&gt;
    alias finderHideHidden=&amp;#039;defaults write com.apple.finder ShowAllFiles FALSE&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   cleanupLS:  Clean up LaunchServices to remove duplicates in the &amp;quot;Open With&amp;quot; menu&lt;br /&gt;
#   -----------------------------------------------------------------------------------&lt;br /&gt;
    alias cleanupLS=&amp;quot;/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user &amp;amp;&amp;amp; killall Finder&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#    screensaverDesktop: Run a screensaver on the Desktop&lt;br /&gt;
#   -----------------------------------------------------------------------------------&lt;br /&gt;
    alias screensaverDesktop=&amp;#039;/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   8.  WEB DEVELOPMENT&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
&lt;br /&gt;
alias apacheEdit=&amp;#039;sudo edit /etc/httpd/httpd.conf&amp;#039;      # apacheEdit:       Edit httpd.conf&lt;br /&gt;
alias apacheRestart=&amp;#039;sudo apachectl graceful&amp;#039;           # apacheRestart:    Restart Apache&lt;br /&gt;
alias editHosts=&amp;#039;sudo edit /etc/hosts&amp;#039;                  # editHosts:        Edit /etc/hosts file&lt;br /&gt;
alias herr=&amp;#039;tail /var/log/httpd/error_log&amp;#039;              # herr:             Tails HTTP error logs&lt;br /&gt;
alias apacheLogs=&amp;quot;less +F /var/log/apache2/error_log&amp;quot;   # Apachelogs:   Shows apache error logs&lt;br /&gt;
httpHeaders () { /usr/bin/curl -I -L $@ ; }             # httpHeaders:      Grabs headers from web page&lt;br /&gt;
&lt;br /&gt;
#   httpDebug:  Download a web page and show info on what took time&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    httpDebug () { /usr/bin/curl $@ -o /dev/null -w &amp;quot;dns: %{time_namelookup} connect: %{time_connect} pretransfer: %{time_pretransfer} starttransfer: %{time_starttransfer} total: %{time_total}\n&amp;quot; ; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   9.  REMINDERS &amp;amp; NOTES&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
&lt;br /&gt;
#   remove_disk: spin down unneeded disk&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   diskutil eject /dev/disk1s3&lt;br /&gt;
&lt;br /&gt;
#   to change the password on an encrypted disk image:&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   hdiutil chpass /path/to/the/diskimage&lt;br /&gt;
&lt;br /&gt;
#   to mount a read-only disk image as read-write:&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   hdiutil attach example.dmg -shadow /tmp/example.shadow -noverify&lt;br /&gt;
&lt;br /&gt;
#   mounting a removable drive (of type msdos or hfs)&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   mkdir /Volumes/Foo&lt;br /&gt;
#   ls /dev/disk*   to find out the device to use in the mount command)&lt;br /&gt;
#   mount -t msdos /dev/disk1s1 /Volumes/Foo&lt;br /&gt;
#   mount -t hfs /dev/disk1s1 /Volumes/Foo&lt;br /&gt;
&lt;br /&gt;
#   to create a file of a given size: /usr/sbin/mkfile or /usr/bin/hdiutil&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   e.g.: mkfile 10m 10MB.dat&lt;br /&gt;
#   e.g.: hdiutil create -size 10m 10MB.dmg&lt;br /&gt;
#   the above create files that are almost all zeros - if random bytes are desired&lt;br /&gt;
#   then use: ~/Dev/Perl/randBytes 1048576 &amp;gt; 10MB.dat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipps und Tricks ==&lt;br /&gt;
=== Mit Terminal auf externe Festplatte zugreifen ===&lt;br /&gt;
 /Volumes&lt;br /&gt;
=== Dateien kopieren, bewegen, umbenennen ===&lt;br /&gt;
 https://www.macworld.com/article/222558/macos-command-line-copying-moving-files-terminal.html&lt;br /&gt;
&lt;br /&gt;
 cp source.txt target.txt&lt;br /&gt;
 cp -R sourceFolder/ /Volumes/backupDrive/myBackupFolder&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Terminal_und_Konsole_auf_dem_Mac&amp;diff=25401</id>
		<title>Terminal und Konsole auf dem Mac</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Terminal_und_Konsole_auf_dem_Mac&amp;diff=25401"/>
		<updated>2021-09-20T16:12:14Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tips für die Arbeit mit dem Terminal&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Das Erscheinungsbild des Terminals kann man einfach Verbessern. Dazu kann man z.B. im Home-Directory die Dateien &amp;#039;&amp;#039;&amp;#039;.bash_profile&amp;#039;&amp;#039;&amp;#039; or &amp;#039;&amp;#039;&amp;#039;.bashrc&amp;#039;&amp;#039;&amp;#039; anpassen. Aber auch die &amp;#039;&amp;#039;&amp;#039;.profile&amp;#039;&amp;#039;&amp;#039; Datei Funktioniert. Je nachdem ob man die User Dateien oder die Globalen nimmt wird die Änderung global oder auf User-Ebene umgesetzt. Wenn die Dateien nicht vorhanden sind einfach hinzufügen.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
=== zsh shell statt bash ab Catalina ===&lt;br /&gt;
https://support.apple.com/de-de/HT208050&lt;br /&gt;
== Prompt anpassen ==&lt;br /&gt;
Wie oben beschrieben z.B. in die .bash_profile datei&lt;br /&gt;
&amp;#039;&amp;#039;Farbiges&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;Prompt&amp;#039;&amp;#039;&amp;#039; und Anzeige als: &amp;#039;&amp;#039;“username@hostname:cwd $”&amp;#039;&amp;#039;&lt;br /&gt;
 export PS1=&amp;quot;\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ &amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Farben auf Mac Terminal ==&lt;br /&gt;
 export CLICOLOR=1&lt;br /&gt;
 export LSCOLORS=GxFxCxDxBxegedabagaced&lt;br /&gt;
&lt;br /&gt;
CLICOLOR=1 bedeutet Farbe anschalten&lt;br /&gt;
LSCOLORS= Farben für die anzeige im Listkommando&lt;br /&gt;
== Mac UNIX ==&lt;br /&gt;
Basiert auf UNIX&lt;br /&gt;
&lt;br /&gt;
Apfel &amp;gt; Über diesen Mac &amp;gt; Software (da steht z.B. die kernel Version)&lt;br /&gt;
&lt;br /&gt;
== Umgebungsvariablen, PATH Variable etc.== &lt;br /&gt;
siehe auch: http://wiki.zone30.info/wikizone/index.php/Linux_-_Umgebungsvariable&lt;br /&gt;
&lt;br /&gt;
alle kriegt man mit&lt;br /&gt;
 set | less&lt;br /&gt;
eine einzelne z.B. mit:&lt;br /&gt;
echo $PATH &lt;br /&gt;
&lt;br /&gt;
==== PATH Variable anpassen ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hinzufügen&amp;#039;&amp;#039;&amp;#039; eines Pfades für eine &amp;#039;&amp;#039;&amp;#039;einzelne&amp;#039;&amp;#039;&amp;#039; Terminal &amp;#039;&amp;#039;&amp;#039;Session&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
 PATH=MeinZusatzPfad:$PATH&lt;br /&gt;
 export PATH&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exportieren&amp;#039;&amp;#039;&amp;#039; ist wichtig wenn die neue Variable auch in &amp;#039;&amp;#039;&amp;#039;Unterterminals&amp;#039;&amp;#039;&amp;#039; zur Verfügung stehen soll (z.B. bei Bash Skripten)&lt;br /&gt;
&lt;br /&gt;
=== Dauerhaft PATH Variable in der Bash setzen ===&lt;br /&gt;
Auf diese Weise stehen die PATH Variable &amp;#039;&amp;#039;&amp;#039;bei jeder Sitzung&amp;#039;&amp;#039;&amp;#039; zur Verfügung. Mac speichert die Bash Datei im Userverzeichnis. &lt;br /&gt;
&lt;br /&gt;
Wir öffnen die bash_profile Datei im Standard Editor (wenn Sie nicht vorhanden ist wird Sie erzeugt).&lt;br /&gt;
 touch ~/.bash_profile; open ~/.bash_profile&lt;br /&gt;
Jetzt können wir die Variable setzen. Hier ein Beispiel mit der Android ADT&lt;br /&gt;
 export PATH=/Users/schlegel/Development/adt-bundle-mac-x86_64/sdk/platform-tools:/Users/schlegel/Development/adt-bundle-mac-x86_64/sdk/tools:$PATH&lt;br /&gt;
&lt;br /&gt;
Durch das :$PATH am Ende wird der neue Wert zu den Standardwerten hinzugefügt oder hier besser vorangestellt)&lt;br /&gt;
&lt;br /&gt;
Jetzt noch die Datei abspeichern und ausführen:&lt;br /&gt;
&lt;br /&gt;
 source ~/.bash_profile&lt;br /&gt;
== Umfangreiches .bash_profile Beispiel ==&lt;br /&gt;
Quelle: http://natelandau.com/my-mac-osx-bash_profile/ (2015-10)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#  ---------------------------------------------------------------------------&lt;br /&gt;
#&lt;br /&gt;
#  Description:  This file holds all my BASH configurations and aliases&lt;br /&gt;
#&lt;br /&gt;
#  Sections:&lt;br /&gt;
#  1.   Environment Configuration&lt;br /&gt;
#  2.   Make Terminal Better (remapping defaults and adding functionality)&lt;br /&gt;
#  3.   File and Folder Management&lt;br /&gt;
#  4.   Searching&lt;br /&gt;
#  5.   Process Management&lt;br /&gt;
#  6.   Networking&lt;br /&gt;
#  7.   System Operations &amp;amp; Information&lt;br /&gt;
#  8.   Web Development&lt;br /&gt;
#  9.   Reminders &amp;amp; Notes&lt;br /&gt;
#&lt;br /&gt;
#  ---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
#   1.  ENVIRONMENT CONFIGURATION&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
&lt;br /&gt;
#   Change Prompt&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export PS1=&amp;quot;________________________________________________________________________________\n| \w @ \h (\u) \n| =&amp;gt; &amp;quot;&lt;br /&gt;
    export PS2=&amp;quot;| =&amp;gt; &amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   Set Paths&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export PATH=&amp;quot;$PATH:/usr/local/bin/&amp;quot;&lt;br /&gt;
    export PATH=&amp;quot;/usr/local/git/bin:/sw/bin/:/usr/local/bin:/usr/local/:/usr/local/sbin:/usr/local/mysql/bin:$PATH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   Set Default Editor (change &amp;#039;Nano&amp;#039; to the editor of your choice)&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export EDITOR=/usr/bin/nano&lt;br /&gt;
&lt;br /&gt;
#   Set default blocksize for ls, df, du&lt;br /&gt;
#   from this: http://hints.macworld.com/comment.php?mode=view&amp;amp;cid=24491&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export BLOCKSIZE=1k&lt;br /&gt;
&lt;br /&gt;
#   Add color to terminal&lt;br /&gt;
#   (this is all commented out as I use Mac Terminal Profiles)&lt;br /&gt;
#   from http://osxdaily.com/2012/02/21/add-color-to-the-terminal-in-mac-os-x/&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
#   export CLICOLOR=1&lt;br /&gt;
#   export LSCOLORS=ExFxBxDxCxegedabagacad&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   -----------------------------&lt;br /&gt;
#   2.  MAKE TERMINAL BETTER&lt;br /&gt;
#   -----------------------------&lt;br /&gt;
&lt;br /&gt;
alias cp=&amp;#039;cp -iv&amp;#039;                           # Preferred &amp;#039;cp&amp;#039; implementation&lt;br /&gt;
alias mv=&amp;#039;mv -iv&amp;#039;                           # Preferred &amp;#039;mv&amp;#039; implementation&lt;br /&gt;
alias mkdir=&amp;#039;mkdir -pv&amp;#039;                     # Preferred &amp;#039;mkdir&amp;#039; implementation&lt;br /&gt;
alias ll=&amp;#039;ls -FGlAhp&amp;#039;                       # Preferred &amp;#039;ls&amp;#039; implementation&lt;br /&gt;
alias less=&amp;#039;less -FSRXc&amp;#039;                    # Preferred &amp;#039;less&amp;#039; implementation&lt;br /&gt;
cd() { builtin cd &amp;quot;$@&amp;quot;; ll; }               # Always list directory contents upon &amp;#039;cd&amp;#039;&lt;br /&gt;
alias cd..=&amp;#039;cd ../&amp;#039;                         # Go back 1 directory level (for fast typers)&lt;br /&gt;
alias ..=&amp;#039;cd ../&amp;#039;                           # Go back 1 directory level&lt;br /&gt;
alias ...=&amp;#039;cd ../../&amp;#039;                       # Go back 2 directory levels&lt;br /&gt;
alias .3=&amp;#039;cd ../../../&amp;#039;                     # Go back 3 directory levels&lt;br /&gt;
alias .4=&amp;#039;cd ../../../../&amp;#039;                  # Go back 4 directory levels&lt;br /&gt;
alias .5=&amp;#039;cd ../../../../../&amp;#039;               # Go back 5 directory levels&lt;br /&gt;
alias .6=&amp;#039;cd ../../../../../../&amp;#039;            # Go back 6 directory levels&lt;br /&gt;
alias edit=&amp;#039;subl&amp;#039;                           # edit:         Opens any file in sublime editor&lt;br /&gt;
alias f=&amp;#039;open -a Finder ./&amp;#039;                 # f:            Opens current directory in MacOS Finder&lt;br /&gt;
alias ~=&amp;quot;cd ~&amp;quot;                              # ~:            Go Home&lt;br /&gt;
alias c=&amp;#039;clear&amp;#039;                             # c:            Clear terminal display&lt;br /&gt;
alias which=&amp;#039;type -all&amp;#039;                     # which:        Find executables&lt;br /&gt;
alias path=&amp;#039;echo -e ${PATH//:/\\n}&amp;#039;         # path:         Echo all executable Paths&lt;br /&gt;
alias show_options=&amp;#039;shopt&amp;#039;                  # Show_options: display bash options settings&lt;br /&gt;
alias fix_stty=&amp;#039;stty sane&amp;#039;                  # fix_stty:     Restore terminal settings when screwed up&lt;br /&gt;
alias cic=&amp;#039;set completion-ignore-case On&amp;#039;   # cic:          Make tab-completion case-insensitive&lt;br /&gt;
mcd () { mkdir -p &amp;quot;$1&amp;quot; &amp;amp;&amp;amp; cd &amp;quot;$1&amp;quot;; }        # mcd:          Makes new Dir and jumps inside&lt;br /&gt;
trash () { command mv &amp;quot;$@&amp;quot; ~/.Trash ; }     # trash:        Moves a file to the MacOS trash&lt;br /&gt;
ql () { qlmanage -p &amp;quot;$*&amp;quot; &amp;gt;&amp;amp; /dev/null; }    # ql:           Opens any file in MacOS Quicklook Preview&lt;br /&gt;
alias DT=&amp;#039;tee ~/Desktop/terminalOut.txt&amp;#039;    # DT:           Pipe content to file on MacOS Desktop&lt;br /&gt;
&lt;br /&gt;
#   lr:  Full Recursive Directory Listing&lt;br /&gt;
#   ------------------------------------------&lt;br /&gt;
alias lr=&amp;#039;ls -R | grep &amp;quot;:$&amp;quot; | sed -e &amp;#039;\&amp;#039;&amp;#039;s/:$//&amp;#039;\&amp;#039;&amp;#039; -e &amp;#039;\&amp;#039;&amp;#039;s/[^-][^\/]*\//--/g&amp;#039;\&amp;#039;&amp;#039; -e &amp;#039;\&amp;#039;&amp;#039;s/^/   /&amp;#039;\&amp;#039;&amp;#039; -e &amp;#039;\&amp;#039;&amp;#039;s/-/|/&amp;#039;\&amp;#039;&amp;#039; | less&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   mans:   Search manpage given in agument &amp;#039;1&amp;#039; for term given in argument &amp;#039;2&amp;#039; (case insensitive)&lt;br /&gt;
#           displays paginated result with colored search terms and two lines surrounding each hit.             Example: mans mplayer codec&lt;br /&gt;
#   --------------------------------------------------------------------&lt;br /&gt;
    mans () {&lt;br /&gt;
        man $1 | grep -iC2 --color=always $2 | less&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
#   showa: to remind yourself of an alias (given some part of it)&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    showa () { /usr/bin/grep --color=always -i -a1 $@ ~/Library/init/bash/aliases.bash | grep -v &amp;#039;^\s*$&amp;#039; | less -FSRXc ; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
#   3.  FILE AND FOLDER MANAGEMENT&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
&lt;br /&gt;
zipf () { zip -r &amp;quot;$1&amp;quot;.zip &amp;quot;$1&amp;quot; ; }          # zipf:         To create a ZIP archive of a folder&lt;br /&gt;
alias numFiles=&amp;#039;echo $(ls -1 | wc -l)&amp;#039;      # numFiles:     Count of non-hidden files in current dir&lt;br /&gt;
alias make1mb=&amp;#039;mkfile 1m ./1MB.dat&amp;#039;         # make1mb:      Creates a file of 1mb size (all zeros)&lt;br /&gt;
alias make5mb=&amp;#039;mkfile 5m ./5MB.dat&amp;#039;         # make5mb:      Creates a file of 5mb size (all zeros)&lt;br /&gt;
alias make10mb=&amp;#039;mkfile 10m ./10MB.dat&amp;#039;      # make10mb:     Creates a file of 10mb size (all zeros)&lt;br /&gt;
&lt;br /&gt;
#   cdf:  &amp;#039;Cd&amp;#039;s to frontmost window of MacOS Finder&lt;br /&gt;
#   ------------------------------------------------------&lt;br /&gt;
    cdf () {&lt;br /&gt;
        currFolderPath=$( /usr/bin/osascript &amp;lt;&amp;lt;EOT&lt;br /&gt;
            tell application &amp;quot;Finder&amp;quot;&lt;br /&gt;
                try&lt;br /&gt;
            set currFolder to (folder of the front window as alias)&lt;br /&gt;
                on error&lt;br /&gt;
            set currFolder to (path to desktop folder as alias)&lt;br /&gt;
                end try&lt;br /&gt;
                POSIX path of currFolder&lt;br /&gt;
            end tell&lt;br /&gt;
EOT&lt;br /&gt;
        )&lt;br /&gt;
        echo &amp;quot;cd to \&amp;quot;$currFolderPath\&amp;quot;&amp;quot;&lt;br /&gt;
        cd &amp;quot;$currFolderPath&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
#   extract:  Extract most know archives with one command&lt;br /&gt;
#   ---------------------------------------------------------&lt;br /&gt;
    extract () {&lt;br /&gt;
        if [ -f $1 ] ; then&lt;br /&gt;
          case $1 in&lt;br /&gt;
            *.tar.bz2)   tar xjf $1     ;;&lt;br /&gt;
            *.tar.gz)    tar xzf $1     ;;&lt;br /&gt;
            *.bz2)       bunzip2 $1     ;;&lt;br /&gt;
            *.rar)       unrar e $1     ;;&lt;br /&gt;
            *.gz)        gunzip $1      ;;&lt;br /&gt;
            *.tar)       tar xf $1      ;;&lt;br /&gt;
            *.tbz2)      tar xjf $1     ;;&lt;br /&gt;
            *.tgz)       tar xzf $1     ;;&lt;br /&gt;
            *.zip)       unzip $1       ;;&lt;br /&gt;
            *.Z)         uncompress $1  ;;&lt;br /&gt;
            *.7z)        7z x $1        ;;&lt;br /&gt;
            *)     echo &amp;quot;&amp;#039;$1&amp;#039; cannot be extracted via extract()&amp;quot; ;;&lt;br /&gt;
             esac&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;&amp;#039;$1&amp;#039; is not a valid file&amp;quot;&lt;br /&gt;
         fi&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
#   4.  SEARCHING&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
&lt;br /&gt;
alias qfind=&amp;quot;find . -name &amp;quot;                 # qfind:    Quickly search for file&lt;br /&gt;
ff () { /usr/bin/find . -name &amp;quot;$@&amp;quot; ; }      # ff:       Find file under the current directory&lt;br /&gt;
ffs () { /usr/bin/find . -name &amp;quot;$@&amp;quot;&amp;#039;*&amp;#039; ; }  # ffs:      Find file whose name starts with a given string&lt;br /&gt;
ffe () { /usr/bin/find . -name &amp;#039;*&amp;#039;&amp;quot;$@&amp;quot; ; }  # ffe:      Find file whose name ends with a given string&lt;br /&gt;
&lt;br /&gt;
#   spotlight: Search for a file using MacOS Spotlight&amp;#039;s metadata&lt;br /&gt;
#   -----------------------------------------------------------&lt;br /&gt;
    spotlight () { mdfind &amp;quot;kMDItemDisplayName == &amp;#039;$@&amp;#039;wc&amp;quot;; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
#   5.  PROCESS MANAGEMENT&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
&lt;br /&gt;
#   findPid: find out the pid of a specified process&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
#       Note that the command name can be specified via a regex&lt;br /&gt;
#       E.g. findPid &amp;#039;/d$/&amp;#039; finds pids of all processes with names ending in &amp;#039;d&amp;#039;&lt;br /&gt;
#       Without the &amp;#039;sudo&amp;#039; it will only find processes of the current user&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    findPid () { lsof -t -c &amp;quot;$@&amp;quot; ; }&lt;br /&gt;
&lt;br /&gt;
#   memHogsTop, memHogsPs:  Find memory hogs&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    alias memHogsTop=&amp;#039;top -l 1 -o rsize | head -20&amp;#039;&lt;br /&gt;
    alias memHogsPs=&amp;#039;ps wwaxm -o pid,stat,vsize,rss,time,command | head -10&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   cpuHogs:  Find CPU hogs&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    alias cpu_hogs=&amp;#039;ps wwaxr -o pid,stat,%cpu,time,command | head -10&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   topForever:  Continual &amp;#039;top&amp;#039; listing (every 10 seconds)&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    alias topForever=&amp;#039;top -l 9999999 -s 10 -o cpu&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   ttop:  Recommended &amp;#039;top&amp;#039; invocation to minimize resources&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
#       Taken from this macosxhints article&lt;br /&gt;
#       http://www.macosxhints.com/article.php?story=20060816123853639&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    alias ttop=&amp;quot;top -R -F -s 10 -o rsize&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   my_ps: List processes owned by my user:&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    my_ps() { ps $@ -u $USER -o pid,%cpu,%mem,start,time,bsdtime,command ; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
#   6.  NETWORKING&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
&lt;br /&gt;
alias myip=&amp;#039;curl ip.appspot.com&amp;#039;                    # myip:         Public facing IP Address&lt;br /&gt;
alias netCons=&amp;#039;lsof -i&amp;#039;                             # netCons:      Show all open TCP/IP sockets&lt;br /&gt;
alias flushDNS=&amp;#039;dscacheutil -flushcache&amp;#039;            # flushDNS:     Flush out the DNS Cache&lt;br /&gt;
alias lsock=&amp;#039;sudo /usr/sbin/lsof -i -P&amp;#039;             # lsock:        Display open sockets&lt;br /&gt;
alias lsockU=&amp;#039;sudo /usr/sbin/lsof -nP | grep UDP&amp;#039;   # lsockU:       Display only open UDP sockets&lt;br /&gt;
alias lsockT=&amp;#039;sudo /usr/sbin/lsof -nP | grep TCP&amp;#039;   # lsockT:       Display only open TCP sockets&lt;br /&gt;
alias ipInfo0=&amp;#039;ipconfig getpacket en0&amp;#039;              # ipInfo0:      Get info on connections for en0&lt;br /&gt;
alias ipInfo1=&amp;#039;ipconfig getpacket en1&amp;#039;              # ipInfo1:      Get info on connections for en1&lt;br /&gt;
alias openPorts=&amp;#039;sudo lsof -i | grep LISTEN&amp;#039;        # openPorts:    All listening connections&lt;br /&gt;
alias showBlocked=&amp;#039;sudo ipfw list&amp;#039;                  # showBlocked:  All ipfw rules inc/ blocked IPs&lt;br /&gt;
&lt;br /&gt;
#   ii:  display useful host related informaton&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    ii() {&lt;br /&gt;
        echo -e &amp;quot;\nYou are logged on ${RED}$HOST&amp;quot;&lt;br /&gt;
        echo -e &amp;quot;\nAdditionnal information:$NC &amp;quot; ; uname -a&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Users logged on:$NC &amp;quot; ; w -h&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Current date :$NC &amp;quot; ; date&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Machine stats :$NC &amp;quot; ; uptime&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Current network location :$NC &amp;quot; ; scselect&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Public facing IP Address :$NC &amp;quot; ;myip&lt;br /&gt;
        #echo -e &amp;quot;\n${RED}DNS Configuration:$NC &amp;quot; ; scutil --dns&lt;br /&gt;
        echo&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   7.  SYSTEMS OPERATIONS &amp;amp; INFORMATION&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
&lt;br /&gt;
alias mountReadWrite=&amp;#039;/sbin/mount -uw /&amp;#039;    # mountReadWrite:   For use when booted into single-user&lt;br /&gt;
&lt;br /&gt;
#   cleanupDS:  Recursively delete .DS_Store files&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    alias cleanupDS=&amp;quot;find . -type f -name &amp;#039;*.DS_Store&amp;#039; -ls -delete&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   finderShowHidden:   Show hidden files in Finder&lt;br /&gt;
#   finderHideHidden:   Hide hidden files in Finder&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    alias finderShowHidden=&amp;#039;defaults write com.apple.finder ShowAllFiles TRUE&amp;#039;&lt;br /&gt;
    alias finderHideHidden=&amp;#039;defaults write com.apple.finder ShowAllFiles FALSE&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   cleanupLS:  Clean up LaunchServices to remove duplicates in the &amp;quot;Open With&amp;quot; menu&lt;br /&gt;
#   -----------------------------------------------------------------------------------&lt;br /&gt;
    alias cleanupLS=&amp;quot;/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user &amp;amp;&amp;amp; killall Finder&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#    screensaverDesktop: Run a screensaver on the Desktop&lt;br /&gt;
#   -----------------------------------------------------------------------------------&lt;br /&gt;
    alias screensaverDesktop=&amp;#039;/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   8.  WEB DEVELOPMENT&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
&lt;br /&gt;
alias apacheEdit=&amp;#039;sudo edit /etc/httpd/httpd.conf&amp;#039;      # apacheEdit:       Edit httpd.conf&lt;br /&gt;
alias apacheRestart=&amp;#039;sudo apachectl graceful&amp;#039;           # apacheRestart:    Restart Apache&lt;br /&gt;
alias editHosts=&amp;#039;sudo edit /etc/hosts&amp;#039;                  # editHosts:        Edit /etc/hosts file&lt;br /&gt;
alias herr=&amp;#039;tail /var/log/httpd/error_log&amp;#039;              # herr:             Tails HTTP error logs&lt;br /&gt;
alias apacheLogs=&amp;quot;less +F /var/log/apache2/error_log&amp;quot;   # Apachelogs:   Shows apache error logs&lt;br /&gt;
httpHeaders () { /usr/bin/curl -I -L $@ ; }             # httpHeaders:      Grabs headers from web page&lt;br /&gt;
&lt;br /&gt;
#   httpDebug:  Download a web page and show info on what took time&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    httpDebug () { /usr/bin/curl $@ -o /dev/null -w &amp;quot;dns: %{time_namelookup} connect: %{time_connect} pretransfer: %{time_pretransfer} starttransfer: %{time_starttransfer} total: %{time_total}\n&amp;quot; ; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   9.  REMINDERS &amp;amp; NOTES&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
&lt;br /&gt;
#   remove_disk: spin down unneeded disk&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   diskutil eject /dev/disk1s3&lt;br /&gt;
&lt;br /&gt;
#   to change the password on an encrypted disk image:&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   hdiutil chpass /path/to/the/diskimage&lt;br /&gt;
&lt;br /&gt;
#   to mount a read-only disk image as read-write:&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   hdiutil attach example.dmg -shadow /tmp/example.shadow -noverify&lt;br /&gt;
&lt;br /&gt;
#   mounting a removable drive (of type msdos or hfs)&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   mkdir /Volumes/Foo&lt;br /&gt;
#   ls /dev/disk*   to find out the device to use in the mount command)&lt;br /&gt;
#   mount -t msdos /dev/disk1s1 /Volumes/Foo&lt;br /&gt;
#   mount -t hfs /dev/disk1s1 /Volumes/Foo&lt;br /&gt;
&lt;br /&gt;
#   to create a file of a given size: /usr/sbin/mkfile or /usr/bin/hdiutil&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   e.g.: mkfile 10m 10MB.dat&lt;br /&gt;
#   e.g.: hdiutil create -size 10m 10MB.dmg&lt;br /&gt;
#   the above create files that are almost all zeros - if random bytes are desired&lt;br /&gt;
#   then use: ~/Dev/Perl/randBytes 1048576 &amp;gt; 10MB.dat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipps und Tricks ==&lt;br /&gt;
=== Mit Terminal auf externe Festplatte zugreifen ===&lt;br /&gt;
 /Volumes&lt;br /&gt;
=== Dateien kopieren, bewegen, umbenennen ===&lt;br /&gt;
 https://www.macworld.com/article/222558/macos-command-line-copying-moving-files-terminal.html&lt;br /&gt;
&lt;br /&gt;
 cp source.txt target.txt&lt;br /&gt;
 cp -R sourceFolder/ /Volumes/backupDrive/myBackupFolder&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_WireMailSmtp_(Module)&amp;diff=25400</id>
		<title>ProcessWire - WireMailSmtp (Module)</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_WireMailSmtp_(Module)&amp;diff=25400"/>
		<updated>2021-09-17T11:43:16Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; https://modules.processwire.com/modules/wire-mail-smtp/&lt;br /&gt;
&lt;br /&gt;
Das geht recht gut wenn man das WireMailSmtp Modul verwendet. ProcessWire selbst kann nur php Mail. Es bietet aber eine Schnittstelle, die Module nutzen können um Mails auf andere Weise zu handeln. WireMailSmtp bietet auf diese Weise einen Versand über SMTP an.&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Modul&amp;#039;&amp;#039;&amp;#039; installieren&lt;br /&gt;
# In den Einstellungen des Moduls die &amp;#039;&amp;#039;&amp;#039;SMTP Daten&amp;#039;&amp;#039;&amp;#039; hinterlegen&lt;br /&gt;
# Formbuilder erkennt das Mailer Module automatisch und nutzt es. Aber trotzdem mal in den Settings von Formbuilder nachschauen was ausgewählt ist. Im Zweifel den &amp;#039;&amp;#039;&amp;#039;Versand auf SMTP stellen&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
# In den &amp;#039;&amp;#039;&amp;#039;Formbuilder Settings&amp;#039;&amp;#039;&amp;#039; sollte eine E-Mail Adresse ausgewählt sein, die der Server zuläßt.&lt;br /&gt;
&lt;br /&gt;
Einstellungen für KASSERVER: &lt;br /&gt;
&lt;br /&gt;
 smtp hostname z.B. webmynet.kasserver.com&lt;br /&gt;
 port 465&lt;br /&gt;
 allow connection without authentication off&lt;br /&gt;
 smtp user z.B. m0551234 (siehe kas)&lt;br /&gt;
 smtp passwort (siehe kas)&lt;br /&gt;
 use start-tls OFF&lt;br /&gt;
 use SSL ON&lt;br /&gt;
 sender email address die adresse über die versendet wird &lt;br /&gt;
&lt;br /&gt;
Einstellungen für Office365&lt;br /&gt;
&lt;br /&gt;
 smtp hostname smtp.office365.com&lt;br /&gt;
 port 587&lt;br /&gt;
 smtp user (e-mail adresse)&lt;br /&gt;
 smtp pass (geheim)&lt;br /&gt;
 use start-tls ON&lt;br /&gt;
 crypto for tls - STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT&lt;br /&gt;
 ssl OFF (WICHTIG)&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Htaccess&amp;diff=25399</id>
		<title>Htaccess</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Htaccess&amp;diff=25399"/>
		<updated>2021-09-03T09:07:21Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: /* Common Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Anwendung von .htaccess - Dateien ==&lt;br /&gt;
=== Weiterführende Links: ===&lt;br /&gt;
https://jweiland.net/know-how/internet/htaccess-konfigurieren.html#c2756&lt;br /&gt;
&lt;br /&gt;
http://httpd.apache.org/docs/1.3/howto/htaccess.html&lt;br /&gt;
&lt;br /&gt;
von: http://www.uni-duesseldorf.de/Service/Webmaster/htaccess.php3 Juli 2006&lt;br /&gt;
&lt;br /&gt;
Referenz: Apache Manual: http://www.uni-duesseldorf.de/apache-manual/&lt;br /&gt;
&lt;br /&gt;
[[Apache Mod Rewrite Syntax]]&lt;br /&gt;
&lt;br /&gt;
=== Wozu braucht man das ?===&lt;br /&gt;
An wen ein HTTP-Server Dokumente herausgibt, welche spezielle Verarbeitung er u.U. bei einer spezifischen Anforderung (einem request) durchführt - all das wird zunächst durch eine von der Server-Software abhängigen Konfiguration bestimmt, die ein Administrator - ein Webmaster - eingerichtet hat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oft ist es aber wünschenswert, daß einzelne Verantwortliche für eine Dokumentenhierarchie auf dem Web-Server selbst ohne Intervention des Webmasters Setzungen vornehmen können, daß z.B. auf einzelne Dokumente oder alle in einem bestimmten Verzeichnis nur ein Zugriff aus bestimmten Domains oder mit verifiziertem Usernamen möglich ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beim Apache-HTTP-Server wie seinem Vorgänger, dem NCSA-httpd, gibt es diese Möglichkeiten durch die Einrichtung von .htaccess-Dateien in dem jeweiligen Verzeichnis. In der folgenden Darstellung wird als Referenz jeweils ein Verweis auf den entsprechenden Abschnitt in der lokale Kopie der Apache-Dokumentation für die Version 1.2 gegeben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Achtung:&amp;#039;&amp;#039;&amp;#039; In der Server-Konfiguration kann ein anderer Name als .htaccess vereinbart sein (AccesFileName-Direkt ive).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Zweiter Hinweis:&amp;#039;&amp;#039;&amp;#039; Die Datei muß für den HTTP-Server lesbar sein, z.B. dadurch erreicht, daß sie öffentlich lesbar ist:&lt;br /&gt;
&lt;br /&gt;
 chmod 644 .htaccess &lt;br /&gt;
&lt;br /&gt;
=== Zugriffsbeschränkung auf eine Domain === &lt;br /&gt;
==== für alle Dateien in einem Verzeichnis ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;.htaccess&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 order deny,allow&lt;br /&gt;
 deny  from all&lt;br /&gt;
 allow from .uni-duesseldorf.de 134.99 &lt;br /&gt;
&lt;br /&gt;
Alle Dateien in dem Verzeichnis werden nur an Clients ausgeliefert, die eine IP-Adresse beginnend mit 134.99 oder einen Hostnamen endend mit uni-duesseldorf.de besitzen; anderenfalls erfolgt eine Fehlermeldung des Servers (403 Forbidden).&lt;br /&gt;
&lt;br /&gt;
Natürlich genügt in vielen Fällen eine der Alternativen. Beachten Sie dabei die Unterschiede:&lt;br /&gt;
&lt;br /&gt;
* Die Angabe des Domain-Namens allein schließt - bewußt oder nicht - den Zugriff von PC&amp;#039;s aus, die nicht im Domain Name System (DNS) registriert sind.&lt;br /&gt;
* Die Angabe des IP-Subnetzes allein kann andere ausschließen, die organisatorisch zur gleichen Domain gehören, technisch aber in einem anderen Subnetz hängen. &lt;br /&gt;
&lt;br /&gt;
Wie lässt sich diese Zugriffsbeschränkung testen? Normalerweise benötigt man dazu einen Internet-Zugang über einen anderen Provider (T-Online, AOL, Compuserve etc.). Oder man benutzt einen Browser auf dem Server selbst z.B. in folgender Weise:&lt;br /&gt;
&lt;br /&gt;
 lynx http://localhost/Service/Webmaster/htaccess.phtml &lt;br /&gt;
&lt;br /&gt;
Der Zugriff erfolgt dann über das Loopback-Interface mit der IP-Adresse 127.0.0.1.&lt;br /&gt;
&lt;br /&gt;
Referenz: order, deny, allow. &lt;br /&gt;
&lt;br /&gt;
==== für einzelne Dateien ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;.htaccess&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Files huh*.html&amp;gt;&lt;br /&gt;
 order deny,allow&lt;br /&gt;
 deny  from all&lt;br /&gt;
 allow from .uni-duesseldorf.de 134.99&lt;br /&gt;
 &amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Zugriffsbeschränkung wie oben gilt jetzt nur für die Dateien, deren Namen auf das hinter Files angegebene Muster passen. Es kann ein einzelner Name angegeben werden oder ein Muster mit den Wildcard-Zeichen ? für ein beliebiges einzelnes Zeichen oder * für eine beliebige Folge von Zeichen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Schließlich sind auch feinere Muster über reguläre Ausdrücke möglich. Die Syntax der Files-Direktive dafür ist:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Files ~ &amp;quot;regexp&amp;quot;&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Referenz: &amp;lt;Files&amp;gt;, order, deny, allow.&lt;br /&gt;
&lt;br /&gt;
=== Zugriffsbeschränkung über Passwort ===&lt;br /&gt;
==== für ein Verzeichnis ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;.htaccess&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 AuthType Basic&lt;br /&gt;
 AuthName MeyersLeute&lt;br /&gt;
 AuthUserFile /home/meyer/passwd&lt;br /&gt;
 require valid-user&lt;br /&gt;
&lt;br /&gt;
Dokumente in einem Verzeichnis mit dieser .htaccess-Datei (oder einem Unterverzeichnis) können erst nach Eingabe eines gültigen Benutzernamen und Passwortes gelesen werden. Der Wert hinter AuthName wird vom Browser in der Dialog-Box für die Passwortabfrage angezeigt und dient gleichzeitig dazu, andere Dokumente mit dem gleichen Schutz zu erkennen und einmal eingelesene Werte für Username und Password ohne erneute Abfrage unmittelbar zu verwenden.&lt;br /&gt;
&lt;br /&gt;
Hinter AuthUserFile steht der Pfad der Passwortdatei, die die Benutzernamen und (verschlüsselten) Passwörter enthält. Sie sieht etwa so aus:&lt;br /&gt;
&lt;br /&gt;
 /home/meyer/passwd&lt;br /&gt;
&lt;br /&gt;
 meyer:xm.kPd4VJc3Fo&lt;br /&gt;
 mueller:eJFQCL8GftDXI&lt;br /&gt;
&lt;br /&gt;
Auch die Passwortdatei muß für den HTTP-Server lesbar sein. Gerade deshalb sollte sie niemals in demselben Bereich liegen wie die vom Server bedienten Dokumente, da sonst zumindest die gültigen Benutzernamen lesbar wären. (Aus diesem Grund müssen Sie aber u.U. daran denken, auch das entsprechende Verzeichnis - wie /home/meyer im Beispiel - für den HTTP-Server zumindest suchbar zu setzen, also etwa:&lt;br /&gt;
&lt;br /&gt;
    chmod 711 /home/meyer &lt;br /&gt;
&lt;br /&gt;
Angelegt und gepflegt werden kann die Passwortdatei mit dem Programm htpasswd:&lt;br /&gt;
&lt;br /&gt;
    htpasswd -c /home/meyer/passwd meyer&lt;br /&gt;
    htpasswd /home/meyer/passwd mueller &lt;br /&gt;
&lt;br /&gt;
Referenz: AuthType, AuthName, AuthUserFile, require.&lt;br /&gt;
&lt;br /&gt;
==== für einzelne Dateien ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;.htaccess&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 AuthType Basic&lt;br /&gt;
 AuthName MeyersLeute&lt;br /&gt;
 AuthUserFile /home/meyer/passwd&lt;br /&gt;
 &amp;lt;Files Huh*.html&amp;gt;&lt;br /&gt;
 require user meyer mueller&lt;br /&gt;
 &amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Kombination von 2. und 3. - Passwortschutz für einzelne Dateien in dem aktuellen Verzeichnis. Beim require wird hier noch eine andere Alternative gezeigt: die Aufzählung einzelner Benutzernamen aus der Passwortdatei. Wenn neue Benutzer in der Passwortdatei ergänzt werden, haben diese noch keinen Zugriff auf die so geschützten Seiten.&lt;br /&gt;
&lt;br /&gt;
Wenn die gleiche Liste von Benutzern an mehreren Stellen verwendet werden soll, ist die Definition der Liste über eine Gruppendatei empfehlenswert. Für diese dritte Alternative bzgl. der require-Direktive sind fogende Änderungen notwendig:&lt;br /&gt;
&lt;br /&gt;
1. In der .htaccess-Datei wird eine Gruppendatei angegeben:&lt;br /&gt;
 AuthGrouprFile /home/meyer/groups&lt;br /&gt;
Für den Ort der Ablage dieser Datei gelten dieselben Erwägungen wie für die Passwortdatei oben.&lt;br /&gt;
2. In der require-Direktive wird jetzt auf eine Gruppendefinition in der Gruppendatei Bezug genommen:&lt;br /&gt;
 require group meyers&lt;br /&gt;
3. Die Gruppendatei ist eine einfache Textdatei mit je einer Gruppendefinition pro Zeile in folgender Form: &lt;br /&gt;
&lt;br /&gt;
 /home/meyer/groups&lt;br /&gt;
 meyers: meyer mueller&lt;br /&gt;
&lt;br /&gt;
Referenz: AuthType, AuthName, AuthUserFile, AuthGroupFile, &amp;lt;Files&amp;gt;, require. &lt;br /&gt;
&lt;br /&gt;
===Spezielle Optionen===&lt;br /&gt;
==== automatischer Index (Directory Listing)====&lt;br /&gt;
ausführliche Infos hier: [[htaccess - Directory Listing]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;.htaccess&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Options +Indexes&lt;br /&gt;
&lt;br /&gt;
Mittels der Options-Direktive können - so von der globalen Server-Konfiguration her erlaubt - Voreinstellungen für Verarbeitungsoptionen für das aktuelle Verzeichnis und Unterverzeichnisse überschrieben werden.&lt;br /&gt;
&lt;br /&gt;
Die gezeigte Variante weist den Server an, bei der Referenz auf das aktuelle Verzeichnis oder ein Unterverzeichnis ein Directory-Listing als Index-Datei automatisch zu generieren. Er macht dies allerdings nur, wenn nicht schon eine Index-Datei (mit vordefiniertem Namen wie index.html) vorhanden ist. Ggf. kann man die hier bekannten Namen mit der Direktive&lt;br /&gt;
&lt;br /&gt;
    DirectoryIndex Welcome.html &lt;br /&gt;
&lt;br /&gt;
einschränken.&lt;br /&gt;
&lt;br /&gt;
Referenz: Options, DirectoryIndex.&lt;br /&gt;
&lt;br /&gt;
==== Automatischer Index mit User Auth ====&lt;br /&gt;
(Quelle Weiland s.o.)&lt;br /&gt;
Directory Listing&lt;br /&gt;
&lt;br /&gt;
Soll über einer geschützen Unterseite (z.B. fileadmin/downloads) des Internetauftritts ein Directory Listing realisiert werden, dann sollte die .htaccess wie folgt eingestellt werden:&lt;br /&gt;
&lt;br /&gt;
 AuthType Basic&lt;br /&gt;
 AuthName &amp;quot;system - &amp;quot;&lt;br /&gt;
 Options +Indexes&lt;br /&gt;
 IndexOptions +FancyIndexing&lt;br /&gt;
 AuthUserFile /*ihr_serverpfad/projektpfad/filadmin/downloads/.htpasswd&lt;br /&gt;
 AuthGroupFile /dev/null&lt;br /&gt;
 require valid-user&lt;br /&gt;
&lt;br /&gt;
* ihr_serverpfad  finden Sie in Ihrem Kundenmenu unter Technische Infos oder durch Eingabe des Befehls $PWD in der Shell.&lt;br /&gt;
&lt;br /&gt;
Den User mit verschlüseltem Passwort in dem Fall in der .htpasswd vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
Die Unterseite mit dem Directory Listing muss von der TYPO3 index.php ausgeschlossen werden und erreichen Sie über die .htaccess in dem Projektverzeichnis mit folgenden Angaben nach der RewriteEngine On:&lt;br /&gt;
&lt;br /&gt;
 RewriteRule ^fileadmin/downloads/$ - [L]&lt;br /&gt;
 RewriteRule ^fileadmin/downloads/.*$ - [L]&lt;br /&gt;
&lt;br /&gt;
==== Startdatei festlegen ====&lt;br /&gt;
Mit dem vorigen Beispiel kann man auch festlegen welche Dateien beim Aufruf eines Verzeichnisses (oder der Webadresse) an den Browser geliefert werden sollen. Manchmal hat man den Fall das die Startdatei eines CMS index.php heißt und bei Wartungsarbeiten die Datei index.html aufgerufen werden soll.&lt;br /&gt;
&lt;br /&gt;
 DirectoryIndex index.html index.php start.html&lt;br /&gt;
&lt;br /&gt;
weist den Apache an falls vorhanden die Datei index.html aufzurufen, wenn nicht die index.php und so weiter.&lt;br /&gt;
&lt;br /&gt;
Bei Wartungsarbeiten kann man nun einfach eine index.html aufspielen die bei Aufruf der Domain angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
==== PHP - Werte setzen ====&lt;br /&gt;
Wenn der Server das erlaubt kann man es folgendermaßen machen:&lt;br /&gt;
===== PHP Memory Limit =====&lt;br /&gt;
 php_value memory_limit 256M&lt;br /&gt;
===== PHP Execution Time =====&lt;br /&gt;
 php_value max_execution_time 240&lt;br /&gt;
&lt;br /&gt;
==== Error Reporting ====&lt;br /&gt;
===== Produktiv Betrieb =====&lt;br /&gt;
(Fehler unterdrückt aber protokolliert)&lt;br /&gt;
&lt;br /&gt;
 php_value error_reporting 2047&lt;br /&gt;
 php_value display_errors 0&lt;br /&gt;
 php_value log_errors 1&lt;br /&gt;
 php_value error_log /eigener/pfad/fehler.log&lt;br /&gt;
&lt;br /&gt;
===== Entwicklung =====&lt;br /&gt;
hier sollte display_errors auf 1 stehen&lt;br /&gt;
&lt;br /&gt;
siehe auch [[PHP - Error Reporting / Fehlerbehandlung]]&lt;br /&gt;
&lt;br /&gt;
siehe auch [[TYPO3 - Error Reporting / Fehlerbehandlung]]&lt;br /&gt;
&lt;br /&gt;
==== Skripte sperren ====&lt;br /&gt;
z.B. bei Überlastung durch ein Skript (hier im Beispiel meineDomain.de/ajax/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteCond %{REQUEST_URI}   (.*)ajax(.*)   [NC]&lt;br /&gt;
RewriteRule ^(.*)  - [F]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Browser Caching ==&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_expires.c&amp;gt;&lt;br /&gt;
ExpiresActive On&lt;br /&gt;
ExpiresByType text/html &amp;quot;access plus 500 seconds&amp;quot;&lt;br /&gt;
ExpiresByType image/gif &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType image/ico &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType image/jpeg &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType image/jpg &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType image/png &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType text/css &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType text/javascript &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType application/x-javascript &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType application/javascript &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Zugriff auf Ordner ==&lt;br /&gt;
=== Sperren ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# This file restricts access to the fileadmin/user_upload/_import_export_ directory. It is&lt;br /&gt;
# meant to protect temporary files which could contain sensible&lt;br /&gt;
# information. Please do not touch.&lt;br /&gt;
&lt;br /&gt;
# Apache &amp;lt; 2.3&lt;br /&gt;
&amp;lt;IfModule !mod_authz_core.c&amp;gt;&lt;br /&gt;
	Order allow,deny&lt;br /&gt;
	Deny from all&lt;br /&gt;
	Satisfy All&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Apache ≥ 2.3&lt;br /&gt;
&amp;lt;IfModule mod_authz_core.c&amp;gt;&lt;br /&gt;
	Require all denied&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weiterleitung mit .htaccess ==&lt;br /&gt;
=== Beispiele mit Fokus auf TYPO3 ===&lt;br /&gt;
Quelle  Weiland (s.o.)&lt;br /&gt;
====Weiterleitungen (Redirects)====&lt;br /&gt;
===== Common Cases =====&lt;br /&gt;
http auf https umleiten&lt;br /&gt;
&lt;br /&gt;
Weiterleitung von http auf https ohne Berücksichtigung der Subdomain (www.)&lt;br /&gt;
&lt;br /&gt;
Damit eine automatische Weiterleitung auf HTTPS erfolgt, wenn die Webseite über HTTP aufgerufen wird, müssen Sie lediglich folgenden Codeschnipsel in die .htaccess Datei Ihres Webprojekts einfügen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_rewrite.c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
&lt;br /&gt;
RewriteCond %{SERVER_PORT} !^443$&lt;br /&gt;
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die Weiterleitung funktioniert jetzt wie folgt:&lt;br /&gt;
&lt;br /&gt;
http://www.domain.de wird auf https://www.domain.de weitergeleitet.&lt;br /&gt;
http://domain.de wird auf https://domain.de weitergleitet.&lt;br /&gt;
&lt;br /&gt;
(Bitte den Platzhalter domain mit Ihrem Domainnamen ersetzen.)&lt;br /&gt;
&lt;br /&gt;
Weiterleitung von http auf https mit Berücksichtigung der Subdomain (www.)&lt;br /&gt;
&lt;br /&gt;
Damit sowohl die Weiterleitung von http auf https, als auch die Weiterleitung von nicht www. auf www. aktiv wird, müssen Sie den folgenden Codeschnipsel in die .htaccess Datei Ihres Webprojekts einfügen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_rewrite.c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
&lt;br /&gt;
RewriteCond %{HTTP_HOST} !^www.domain.de$ [NC]&lt;br /&gt;
RewriteRule ^(.*)$ https://www.domain.de/$1 [L,R=301]&lt;br /&gt;
&lt;br /&gt;
RewriteCond %{SERVER_PORT} !=443&lt;br /&gt;
RewriteRule ^(.*)$ https://www.domain.de/$1 [R=301,L]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die Weiterleitung funktioniert jetzt wie folgt:&lt;br /&gt;
&lt;br /&gt;
http://www.domain.de wird auf https://www.domain.de weitergeleitet.&lt;br /&gt;
&lt;br /&gt;
http://domain.de wird auf https://www.domain.de weitergleitet.&lt;br /&gt;
&lt;br /&gt;
https://domain.de wird auf https://www.domain.de weitergeleitet.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Schreibweise ohne www. bevorzugen, können Sie natürlich das Weiterleitungsziel entsprechend anpassen. Dafür müssen Sie einfach die URL Angabe bei &amp;quot;RewriteRule&amp;quot; anpassen und auf die Version ohne www. verweisen.&lt;br /&gt;
&lt;br /&gt;
Einzelne Unterseiten weiterleiten&lt;br /&gt;
&lt;br /&gt;
Aufrufe einer Unterseite (z.B. a.html) auf eine andere Unterseite (z.B. b.html) innerhalb der selben Domain weiterleiten.&lt;br /&gt;
 Redirect 301 /a.html /b.html&lt;br /&gt;
&lt;br /&gt;
Ganzen Ordner / Verzeichnis weiterleiten&lt;br /&gt;
&lt;br /&gt;
Aufrufe eines Ordners (z.B. /a) auf einen anderen Ordner innerhalb der selben Domain (z.B. /b) weiterleiten. Die Weiterleitung wirkt sich auch auf alle Dateien innerhalb des Ordners /a aus, so wird z.B. der Aufruf von /a/test.html auf /b/test.html weitergeleitet.&lt;br /&gt;
 Redirect 301 /a /b&lt;br /&gt;
&lt;br /&gt;
Domain Weiterleitung: Ganze Domain umleiten&lt;br /&gt;
&lt;br /&gt;
Aufrufe einer Unterseite (URL) von Domain A auf die selbe Unterseite (URL) unter Domain B weiterleiten.&lt;br /&gt;
z.B. domain-a.de/test.html auf domain-b.de/test.html weiterleiten wobei dies nicht nur für test.html, sondern auch für alle weiteren Unterseiten gilt.&lt;br /&gt;
 Redirect 301 / http://www.domain-b.de/&lt;br /&gt;
&lt;br /&gt;
Alternative Lösung mittels RewriteCond / RewriteRule:&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{HTTP_HOST} domain-a.de$ [NC]&lt;br /&gt;
 RewriteRule ^(.*) http://www.domain-b.de/$1 [R=301,L]&lt;br /&gt;
&lt;br /&gt;
URLs ohne www. auf URLs mit www. weiterleiten&lt;br /&gt;
&lt;br /&gt;
Standard Domain definieren und Aufrufe einer URL ohne die Subdomain www. auf die entsprechende URL mit www. weiterleiten um z.B. doppelte Inhalte für Suchmaschinen zu vermeiden.&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^domain.de$ [NC]&lt;br /&gt;
 RewriteRule (.*) http://www.domain.de/$1 [R=301,L]&lt;br /&gt;
&lt;br /&gt;
Alle Unterseiten auf Startseite weiterleiten&lt;br /&gt;
&lt;br /&gt;
Alle Aufrufe auf Unterseiten einer Domain mit Ausnahme der index.html, der Style.css sowie aller Dateien im Ordner /img/ auf die Startseite weiterleiten.&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
 RewriteCond %{REQUEST_URI} !^/(index\.html|style\.css)?$ [NC]&lt;br /&gt;
 RewriteCond %{REQUEST_URI} !^/img(/|$) [NC]&lt;br /&gt;
 RewriteRule ^.*$ /index.html [L,R=301]&lt;br /&gt;
URL mit Parameter weiterleiten&lt;br /&gt;
&lt;br /&gt;
Aufrufe von URLs welche einen bestimmten Parameter (z.B. test) enthalten, unabhängig von dessen Wert, auf ein Verzeichnis (z.B. /verzeichnis/) oder eine Unterseite weiterleiten.&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{QUERY_STRING} ^test=(.*)$&lt;br /&gt;
 RewriteRule ^(.*)$ /verzeichnis/? [R=301,L]&lt;br /&gt;
&lt;br /&gt;
URLs mit einem bestimmten Parameterwert weiterleiten (In diesem Fall Wert &amp;quot;test&amp;quot; für den Parameter &amp;quot;s&amp;quot; auf das Verzeichnis &amp;quot;test&amp;quot; weiterleiten).&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{QUERY_STRING} ^s=test$&lt;br /&gt;
 RewriteRule ^(.*)$ /test/? [R=301,L]&lt;br /&gt;
Parameter aus URL entfernen&lt;br /&gt;
&lt;br /&gt;
Aufrufe von URLs welche einen bestimmten Parameter (z.B. www.domain.de/verzeichnis/?test=...) enthalten, unabhängig von dessen Wert, auf die selbe URL ohne Parameter am Ende (z.B. www.domain.de/verzeichnis/) weiterleiten bzw. den den Parameter aus der URL entfernen. Falls die Regel nur für einen bestimmten Parameter Wert gelten soll, kann der Code analog zum vorherigen Beispiel modifiziert werden.&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{QUERY_STRING} test=(.*)$&lt;br /&gt;
 RewriteRule ^(.*)$ /$1? [R=301,L]&lt;br /&gt;
&lt;br /&gt;
===== Allgemeines =====&lt;br /&gt;
&lt;br /&gt;
Die Weiterleitung von Domains und Anfragen zu einzelnen Webseiten ist eine der Hauptanwendungen der .htaccess Datei. Das notwendige Apache Modul mod_rewrite ist in unseren Hosting Tarifen vorhanden. &lt;br /&gt;
&lt;br /&gt;
Die Weiterleitung muss jedoch in der .htaccess Datei zunächst mit folgendem Eintrag aktiviert werden (in den weiteren Beispielen haben wir diese Zeile weggelassen):&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
301 oder 302 Weiterleitung?&lt;br /&gt;
&lt;br /&gt;
Der Weiterleitung (Redirect) sollte man noch einen Statuscode mitgeben: 301 oder 302. Worin liegt der Unterschied? &lt;br /&gt;
&lt;br /&gt;
 301: die Weiterleitung ist dauerhaft, z.B. weil die Navigationsstruktur einer Webseite umgestellt wurde&lt;br /&gt;
&lt;br /&gt;
 302: die Weiterleitung erfolgt nur vorübergehend, anschließend gilt wieder die bisherige Adresse&lt;br /&gt;
&lt;br /&gt;
Am Ende der RewriteRule Zeile wird der Code für die Weiterleitung (Redirect) in eckigen Klammern angegeben. Mit dem zusätzlichen Parameter L (Letzter, Last) kann man festlegen, dass die weiteren Anweisungen in der .htaccess Datei ignoriert werden sollen. Hierzu ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
 RewriteRule ^neues\.html$ /aktuelles.html [R=301,L]&lt;br /&gt;
Damit wird die Seite domain.tld/neues.html dauerhaft auf domain.tlld/aktuelles.htmlweitergeleitet.&lt;br /&gt;
&lt;br /&gt;
Die Schreibweise der Rewrite Regeln basiert dabei auf &amp;quot;Regulären Ausdrücken&amp;quot; (Regular Expressions, regex). &lt;br /&gt;
&lt;br /&gt;
Mit den Zeichen ^ und $ wird Anfang und Ende der umzuleitenden Seite gekennzeichnet. Der Punkt . steht in regulären Ausdrücken für ein beliebiges Zeichen, wenn wir wirklich einen Punkt meinen, dann wird dies mit einem Backslash \ gekennzeichnet (\ bedeutet also: exakt das nächste Zeichen).&lt;br /&gt;
&lt;br /&gt;
====Besonderheit: Anker auf einer Seite====&lt;br /&gt;
&lt;br /&gt;
Auf einer Webseite können &amp;quot;Anker&amp;quot; als Sprungmarke gesetzt sein. Beim Aufruf wird im Browser nicht auf den Anfang der Seite sondern direkt zum Ankerpunkt gesprungen. Der Anker wird durch ein Hash-Zeichen # in der URL gefolgt vom Namen der Sprungmarke gekennzeichnet. Beispiel für eine Adresse mit Anker:&lt;br /&gt;
&lt;br /&gt;
 domain.tld/aktuelles.html#artikel25&lt;br /&gt;
Soll per .htaccess Weiterleitung direkt auf eine Sprungmarke verwiesen werden, muss der zusätzliche Parameter NE (No Encoding) in eckigen Klammern angegeben werden:&lt;br /&gt;
&lt;br /&gt;
 RewriteRule ^neues\.html$ /aktuelles.html#artikel25 [R=301,L,NE]&lt;br /&gt;
Domain auf verschlüsselte Verbindung umleiten&lt;br /&gt;
&lt;br /&gt;
Sollen alle Seiten einer Domain ausschließlich über eine SSL-Verbindung aufgerufen werden, so kann dies über einen Eintrag in der .htaccess Datei im Startverzeichnis der Domain eingerichtet werden:&lt;br /&gt;
&lt;br /&gt;
 RewriteCond %{SERVER_PORT} !^443$&lt;br /&gt;
 RewriteRule (.*) https://%{HTTP_HOST}/$1 [L]&lt;br /&gt;
In der ersten Zeile wird die Funktion zum Umschreiben von URLs im Apache Webserver aktiviert. In der zweiten Zeile wird die Bedingung definiert &amp;quot;Wenn der Aufruf nicht auf Port 443 erfolgt&amp;quot; (Port 443 wird für SSL-Verschlüsselung verwendet, Port 80 für unverschlüsselte Aufrufe). Zeile 3 ist die Regel für das Umschreiben der URL. Wenn die Bedingung aus Zeile 2 zutrifft, werden die Aufrufe einer beliebigen Seite auf die gleiche Domain (${HTTP_HOST}) jedoch über das https:// Protokoll umgeleitet. Mit /$1 wird die ursprüngliche URL (z.B. impressum.html) an den Domainnamen angefügt. Mit dem Parameter [L] wird angegeben, dass das Umschreiben der URLs hier enden soll, weitere Zeilen in der .htaccess Datei werden also ignoriert.&lt;br /&gt;
&lt;br /&gt;
====Domain name-of-domain.net nach name-der-domain.de umleiten====&lt;br /&gt;
&lt;br /&gt;
Oftmals werden für ein Projekt mehrere Domains registriert, um verschiedene Schreibweisen abzudecken. Nach außen wird eine Hauptdomain kommunziert (Beispiel: name-der-domain.de als Hautpdomain, dazu name-of-domain.net als Zusatzdomains). &lt;br /&gt;
&lt;br /&gt;
Mit folgendem Eintrag in der .htaccess Datei werden alle Aufrufe für name-of-domain.net nach name-der-domain.de weitergeleitet:&lt;br /&gt;
&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^(www\.)?name-of-domain\.net$ [NC]&lt;br /&gt;
 RewriteRule ^(.*)$ http://www.name-der-domain.de/$1 [R=301,L]&lt;br /&gt;
Die Weiterleitung nach name-der-domain.de erfolgt dabei mit dem Statuscode 301 (permanent), so dass auch in Suchmaschinen auf Dauer nur diese erscheint. Dadurch werden Probleme mit &amp;quot;doppeltem Inhalt&amp;quot; (Duplicate Content) vermieden. Alle bei der ursprünglichen Domain übermittelten Parameter werden an die Zieldomain weitergegeben.&lt;br /&gt;
&lt;br /&gt;
====Einer Domain immer www. voranstellen====&lt;br /&gt;
&lt;br /&gt;
Mit folgendem Eintrag in der .htaccess Datei werden alle Aufrufe für eine Domain ohne www auf die Variante mit www weitergeleitet:&lt;br /&gt;
&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^name-der-domain\.de$ [NC]&lt;br /&gt;
 RewriteRule ^(.*)$ http://www.name-der-domain.de/$1 [R=301,L]&lt;br /&gt;
Die Weiterleitung nach www.name-der-domain.de erfolgt dabei mit dem Statuscode 301 (permanent), so dass auch in Suchmaschinen auf Dauer nur diese erscheint.&lt;br /&gt;
&lt;br /&gt;
====Domain auf eine Seite leiten====&lt;br /&gt;
&lt;br /&gt;
Bestimmte Domains oder Subdomains sollen entweder mit oder ohne www auf eine bestimmte Unterseite weitergeleitet werden.&lt;br /&gt;
&lt;br /&gt;
Dazu fügen Sie folgende Zeilen in Ihre .htaccess ein:&lt;br /&gt;
&lt;br /&gt;
 #Ohne realurl: &lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^(www\.)?name-der-domain\.de &lt;br /&gt;
 RewriteRule ^$ /index.php?id=85 &lt;br /&gt;
&lt;br /&gt;
 #oder realurl/simulatestatic mit html Suffix: &lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^(www\.)?name-der-domain\.de &lt;br /&gt;
 RewriteRule ^$ /unterseite.html &lt;br /&gt;
&lt;br /&gt;
 #oder realurl ohne html Suffix: &lt;br /&gt;
&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^(www\.)?name-der-domain\.de &lt;br /&gt;
 RewriteRule ^$ /unterseite/ &lt;br /&gt;
&lt;br /&gt;
====Weiterleitung auf eine andere Domain zu einer Unterseite====&lt;br /&gt;
&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^(www\.)?name-of-domain\.net [NC]&lt;br /&gt;
 RewriteRule ^(.*)$ http://www.name-der-domain.de/unterseite.hmtl [R=301,L] &lt;br /&gt;
 Redirect mit ? in der URL&lt;br /&gt;
&lt;br /&gt;
http://www.domainname.de/index.php?id=7&lt;br /&gt;
soll nach&lt;br /&gt;
&lt;br /&gt;
http://www.domainname.de/impressum.html&lt;br /&gt;
umgeleitet werden. Das Problem ist das ? in der alten URL und muss per QUERY_STRING in der Condition abgefragt werden. &lt;br /&gt;
Lösung:&lt;br /&gt;
&lt;br /&gt;
 RewriteCond %{QUERY_STRING} ^id=7$&lt;br /&gt;
 RewriteRule ^.*$ http://www.domainname.de/impressum.html? [L,R=301]&lt;br /&gt;
Wichtig ist auch der Browser-Cache. Der sollte unbedingt geleert werden, denn wenn ein Aufruf noch im Cache drin ist kann dadurch u.U. immer auf die falsche Seite leiten.&lt;br /&gt;
&lt;br /&gt;
So verhindert man, dass alte durch einen Umzug oder Neuprogrammierung nicht mehr vorhandene URLs in den Suchmaschinen zu einem schlechteren Ranking&lt;br /&gt;
&lt;br /&gt;
=== Weitere Beispiele (älter) ===&lt;br /&gt;
&lt;br /&gt;
Hinweis: eine Alternative hierfür ist eine PHP Weiterleitung ([[PHP - Tipps und Tricks]])&lt;br /&gt;
Quelle Dr.Web 28.12.2006&lt;br /&gt;
&lt;br /&gt;
Sie können sowohl Zugriffe auf bestimmte Dateien als auch auf Verzeichnisse bequem weiterleiten. Das klappt innerhalb der eigenen Domain, aber auch mit externen Verweisen.&lt;br /&gt;
&lt;br /&gt;
Die Datei .htaccess kann mit jedem Text-Editor bearbeitet werden. Eine Umleitung könnte so aussehen:&lt;br /&gt;
&lt;br /&gt;
 Redirect /beispielverzeichnis http://www.drweb.de&lt;br /&gt;
&lt;br /&gt;
Ruft jemand die URL http://www.drweb.de/beispielverzeichnis auf landet er ohne weiteren Zwischenstopp direkt auf der Startseite.&lt;br /&gt;
&lt;br /&gt;
Mit Einzeldateien klappt es auch:&lt;br /&gt;
&lt;br /&gt;
 Redirect /beispielseite.shtml http://www.drweb.de&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
 Redirect /beispielseite.shtml neueseite.shtml&lt;br /&gt;
&lt;br /&gt;
Wer mag, kann die gesamte Domain auf eine andere umleiten&lt;br /&gt;
&lt;br /&gt;
 Redirect / http://www.drweb.de/&lt;br /&gt;
&lt;br /&gt;
Nützlich während Bauarbeiten, bei Reparaturen oder wenn Dateien durch andere ersetzt wurden. Da die Umleitung serverseitig geschieht, spielt der Browser des Besuchers keine Rolle.&lt;br /&gt;
&lt;br /&gt;
Weitere nützliche Beispiele:&lt;br /&gt;
&lt;br /&gt;
Den Domainnamen ohne www auf den mit www umleiten. Es wird der Code 301 mitgegeben.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RewriteEngine on&lt;br /&gt;
RewriteCond %{HTTP_HOST} !^www\. [NC]&lt;br /&gt;
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Weiterleitung auf sichere Verbindung (https) ===&lt;br /&gt;
&lt;br /&gt;
== Umleitung auf https ==&lt;br /&gt;
Sichere Seiten sind seid 2019 Standard und quasi Pflicht. Mit diesem Code kann man von http auf https weiterleiten und gibt einen 301 (Moved Permanently) Header mit.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_rewrite.c&amp;gt;&lt;br /&gt;
  # Enable URL rewriting&lt;br /&gt;
  RewriteEngine On&lt;br /&gt;
  # Redirect to https&lt;br /&gt;
  RewriteCond %{SERVER_PORT} !^443$&lt;br /&gt;
  RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Moved Permanently 301 Redirect ===&lt;br /&gt;
Quelle:http://www.fladi.de/2008/04/28/howto-webseiten-redirect-mit-301/ (25.7.2008)&lt;br /&gt;
&lt;br /&gt;
Was ist ein 301 redirect?&lt;br /&gt;
&lt;br /&gt;
301 redirect ist die wohl beste Möglichkeit das aktuelle Suchmaschinenranking beim Umzug einer Seite oder des gesamten Webauftritts zu behalten. Der Code “301″ steht für “moved permanently” (dauerhaft verschoben). Ein solches Redirect wird in der .htaccess Datei eintragen. Es trägt die Form (alles in einer Zeile):&lt;br /&gt;
&lt;br /&gt;
 redirect 301 pfad/alte/seite/datei.html http://www.domain.de/pfad/neue/seite/datei.html &lt;br /&gt;
&lt;br /&gt;
Beachte, kein “http://www” in das erste Statement zu schreiben. Es muss der komplette Pfad vom Root deines Webservers angegeben werden. Schauen wir uns die Zeile nun nochmal genauer an:&lt;br /&gt;
&lt;br /&gt;
    * “redirect 301″ - die eigentliche Anweisung für den Webserver&lt;br /&gt;
    * “/pfad/alte/seite/datei.html” - die Seite die umgeleitet werden soll&lt;br /&gt;
    * “http://www.domain.de/pfad/neue/seite.datei.html” - die komplette neue URL&lt;br /&gt;
&lt;br /&gt;
Wie reagiert nun ein Suchmaschinen-Spider auf eine solche Umleitung? Die .htaccess wird ja nicht vom Spider ausgelesen, sondern vom Webserver “ausgeführt”. Der Spider jedoch erkennt den Statuscode, den der Webserver liefert. Beim nächsten Update seiner Datenbank sollte die Suchmaschine nun die alte URL aus dem Index werfen und die neue aufnehmen. Häufig kommt es aber auch vor, dass alte und neue URL gemischt auftauchen. Auch leichte Änderungen im Pagerank können auftreten. Es dauert so ca. 6-8 Wochen bis sich die Änderungen an der Seite auch in den Suchergebnissen niederschlagen.&lt;br /&gt;
&lt;br /&gt;
Weitere Möglichkeiten von 301 redirect:&lt;br /&gt;
&lt;br /&gt;
   1. Um ALLE Dateien Deiner Domain mithilfe einer .htaccess umzuleiten kannst Du (auf einem Unix/Linux-Webserver) i.d.R. folgendes verwenden:&lt;br /&gt;
 redirect 301 ^(.*)$ http://www.domain.de&lt;br /&gt;
 redirectMatch permanent ^(.*)$ http://www.domain.de&lt;br /&gt;
&lt;br /&gt;
Um Deine alte Startseite (index.html) umzuleiten:&lt;br /&gt;
 redirect 301 /index.html http://www.domain.de/index.html&lt;br /&gt;
 redirect permanent /index.html http://www.domain.de/index.html&lt;br /&gt;
&lt;br /&gt;
2. Wenn Du http://domain.de auf http://www.domain.de umleiten möchtest und mod_rewrite auf dem Webserver verfügbar ist, erreichst Du dies durch folgende .htaccess:&lt;br /&gt;
&lt;br /&gt;
 Options +FollowSymLinks&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^domain\.de&lt;br /&gt;
 RewriteRule ^(.*)$ http://www.domain.de/$1 [R=permanent,L]&lt;br /&gt;
&lt;br /&gt;
 oder&lt;br /&gt;
&lt;br /&gt;
 Options +FollowSymLinks&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^domain\.de$ [NC]&lt;br /&gt;
 RewriteRule ^(.*)$ http://www.domain.de/$1 [R=301,L]&lt;br /&gt;
&lt;br /&gt;
3. Alle .html Dateien auf .php Dateien umzuleiten ist durch mod_rewrite auch kein großes Problem:&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
 RewriteRule (.*).html$ /$1.php&lt;br /&gt;
&lt;br /&gt;
4. Um ein Verzeichnis und alles darunter umzuleiten:&lt;br /&gt;
&lt;br /&gt;
 redirectMatch 301 ^/verzeichnis-alt/(.*) http://www.domain.de/verzeichnis-neu/&lt;br /&gt;
&lt;br /&gt;
=== Warum nicht per META-Tag redirect machen? ===&lt;br /&gt;
&lt;br /&gt;
Die Umleitung per META-Tag erfolgt direkt in der aufgerufenen Seite. Dort wird im HEAD-Teil&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;meta http-equiv=”refresh” content=”0; url=http://www.domain.de/”&amp;gt;&lt;br /&gt;
eingetragen. Hierbei bewirkt das “content=10″, dass der Browser nach 10 Sekunden die darauffolgende URL aufruft. Wenn man “content=0″ einträgt wird die Umleitung sofort ausgeführt. Ein paar alte Browser unterstützen diese Art der Umleitung nicht. Deshalb ist es besser noch zusätzlich den Link (neue Domain) mit anzugeben.&lt;br /&gt;
&lt;br /&gt;
Technisch gesehen liefert die angefragte Seite, wie auch die Seite auf die umgeleitet wird, einen Statuscode “200 OK” zurück. Es sind also zwei unabhängige Seiten. Dementsprechend versucht die Suchmaschinen auch beide Seiten zu indizieren. Hier genau liegt aber das Problem. Denn der Spider des Suchmaschinenbetreibers erkennt die Umleitung und wertet Deine Seite deshalb u.U. ab, da es sich um eine beliebte SPAM-Methode handelt. So könnte man 1000 Domains mit solchen Seiten und jeder Menge Keywords einrichten. Echte Besucher (kein Spider) werden umgeleitet auf die eigentliche Seite. Indiziert wird aber nicht nur die eigentliche Seite sondern auch die 1000 Domains mit Keywords, die meist gar nichts mit dem eingentlichen Inhalt zu tun haben.&lt;br /&gt;
&lt;br /&gt;
Beim 301 redirect wird hingegen nur die echte Zielseite in den Index aufgenommen und durch den Statuscode kann der Suchmaschinenbetreiber zusätzlich noch die veralteten Seite aus dem Index werfen. Dies ist also der beste Weg um alte Seiten auf neue umzuleiten und gleichzeitig wird auch der Page Rank mit übertragen.&lt;br /&gt;
&lt;br /&gt;
===Weiterleitung über IP===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Options +FollowSymlinks&lt;br /&gt;
RewriteEngine on&lt;br /&gt;
&lt;br /&gt;
#IP Bedingung&lt;br /&gt;
RewriteCond %{REMOTE_HOST} ^85\.13\.128\.137&lt;br /&gt;
&lt;br /&gt;
#Zielseite erlauben&lt;br /&gt;
RewriteCond %{REQUEST_URI} !/ip-remote\.php$&lt;br /&gt;
&lt;br /&gt;
#Umleiten&lt;br /&gt;
#RewriteRule ^/* http://demo.webmynet.de/ip-remote.php [R,NE,NC]&lt;br /&gt;
RewriteRule /(.*)$ /ip-remote.php [R=302,L]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Erlaubte Anweisungen in .htaccess-Dateien ==&lt;br /&gt;
&lt;br /&gt;
http://de.selfhtml.org/servercgi/server/htaccess.htm&lt;br /&gt;
&lt;br /&gt;
Auszug (Datum des Zugriffs: 10.9.2007): &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Die Anweisung AllowOverride kann nicht innerhalb einer .htaccess notiert werden, sondern wird ausschließlich vom Server-Administrator in der zentralen Konfigurationsdatei vorgegeben. Um den AllowOverride-Wert in Erfahrung zu bringen, benötigen Sie Einsicht in die Serverkonfiguration. Kontaktieren Sie dazu gegebenenfalls Ihren Webhosting-Provider. Dieser kann den Wert auch ändern, falls Sie bestimmte bisher nicht erlaubte Anweisungen verwenden möchten. Im einzelnen gibt es dafür folgende mögliche Werte:&lt;br /&gt;
&lt;br /&gt;
    * Mit AllowOverride None wird der Webserver angewiesen, .htaccess-Dateien zu ignorieren. Das ist im Übrigen die Voreinstellung.&lt;br /&gt;
    * Mit AllowOverride All wird festgelegt, dass in einer .htaccess-Datei (so gut wie) sämtliche zentrale Vorgaben überschrieben und damit abgeändert werden dürfen. Das kann bedeuten, dass Vorhaben, die eigentlich verboten sind (beispielsweise die Ausführung von CGI-Scripts), mit Hilfe einer .htaccess-Datei erlaubt werden. Als Server-Administrator werden Sie diese Anweisung also nur sehr vorsichtig einsetzen.&lt;br /&gt;
    * Mit AllowOverride Options wird festgelegt, dass in einer .htaccess-Datei nach unten Anweisungen zur Steuerung spezieller Verzeichniseigenschaften zulässig sind.&lt;br /&gt;
    * Mit AllowOverride Limit wird festgelegt, dass in einer .htaccess-Datei nach unten Zugriffe von bestimmten Hosts erlaubt oder untersagt werden können.&lt;br /&gt;
    * Mit AllowOverride Indexes wird festgelegt, dass in einer .htaccess-Datei nach unten Anweisungen zur Steuerung von Verzeichnisindizes zulässig sind.&lt;br /&gt;
    * Mit AllowOverride FileInfo wird festgelegt, dass in einer .htaccess-Datei Anweisungen zur Akzeptanz bestimmter Dokumenttypen zulässig sind - beispielsweie, um nach unten Individuelle Fehlermeldungen ausgeben zu können.&lt;br /&gt;
    * Mit AllowOverride AuthConfig wird festgelegt, dass in einer .htaccess-Datei Autorisierungsanweisungen stehen dürfen - das betrifft beispielsweise Regelungen zum nach unten Passwortschutz.&lt;br /&gt;
&lt;br /&gt;
Diese Werte können auch miteinander kombiniert werden. All ist der mächtigste Parameter, mit dem alles das zugelassen wird, was die anderen Parameter steuern.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Ändern muß natürlich der Server neu gestartet werden (bei Debian: apache restart)&lt;br /&gt;
&lt;br /&gt;
==IP Adressen sperren==&lt;br /&gt;
&lt;br /&gt;
Manchmal ist es notwendig, bestimmte IP Adressen vom Aufruf der Webseite auszusperren, z.B. bei einem Angriffsversuch auf die Webseite. Über folgenden Eintrag in der .htaccess Datei (z.B. vor dem Eintrag &amp;#039;RewriteEngine On&amp;#039;) im Startverzeichnis der Seite lassen sich unerwünschte Besucher abweisen:&lt;br /&gt;
&lt;br /&gt;
 order allow,deny &lt;br /&gt;
 deny from 192.168.2.17 &lt;br /&gt;
 deny from 10.10.20.63 &lt;br /&gt;
 allow from all&lt;br /&gt;
Bei mehreren IP Adressen wird jede in eine eigene Zeile eingetragen. Die Einstellung gilt auch für alle Unterverzeichnisse. Wenn jemand mit einer gesperrten Adresse versucht, die Seite aufzurufen, erhält er einen 403 Fehlercode.&lt;br /&gt;
&lt;br /&gt;
==HTML5 Videos / bestimmte Dateitypen zulassen ==&lt;br /&gt;
&lt;br /&gt;
Falls es in einzelnen Browsern zu Problemen beim Abspielen von per HTML5 eingebundenen Videos kommt, helfen eventuell folgende Zeilen in der .htaccess Datei im Projektverzeichnis:&lt;br /&gt;
&lt;br /&gt;
 AddType video/ogg .ogm &lt;br /&gt;
 AddType video/ogg .ogv &lt;br /&gt;
 AddType video/ogg .ogg &lt;br /&gt;
 AddType video/webm .webm &lt;br /&gt;
 AddType audio/webm .weba &lt;br /&gt;
 AddType video/mp4 .mp4 &lt;br /&gt;
 AddType video/x-m4v .m4v&lt;br /&gt;
&lt;br /&gt;
== htaccess für Typo3 ==&lt;br /&gt;
&lt;br /&gt;
http://www.typo3lexikon.de/server/htaccess.html (11/2014)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.htaccess für TYPO3&lt;br /&gt;
Ich möchte auf dieser Seite nicht erklären wie .htaccess-Dateien erstellt werden. Nein. Davon gibt es schon zu genüge Dokumentationen im Web:&lt;br /&gt;
&lt;br /&gt;
Allgemeines zu htaccess&lt;br /&gt;
&lt;br /&gt;
URLs manipulieren&lt;br /&gt;
&lt;br /&gt;
Reguläre Ausdrücke&lt;br /&gt;
&lt;br /&gt;
htaccess Beispiele&lt;br /&gt;
&lt;br /&gt;
Auf dieser Seite geht es mehr um das Zusammenspiel von TYPO3 und htaccess-Dateien gerade in Bezug unter der Verwendung von der Extension RealUrl. In den nächsten Zeilen werde ich Euch meine htaccess-Datei in Detail näher erklären:&lt;br /&gt;
&lt;br /&gt;
RewriteEngine&lt;br /&gt;
Mit RewriteEngine kannst Du das Modifizieren von URLs de- bzw. aktivieren. Erst wenn diese Option aktiviert ist, kannst du z.B. alle Anfragen, die an Deinen Server gesendet werden auf eine völlig andere Webseite umleiten.&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
Bestimmte Verzeichnisse nicht umschreiben&lt;br /&gt;
Wenn Ihr RealUrl installiert habt, dann erhaltet Ihr je nach Konfiguration URLs wie&lt;br /&gt;
&lt;br /&gt;
/meine-seite/kontakt/impressum.html&lt;br /&gt;
Dabei sind die vermeintlichen Ordner gar keine echten Ordner auf dem Server, sondern Informationen, die an die index.php weitergeleitet werden, um dann die gewünschte Seite aufrufen zu können. Was aber, wenn wir wirklich mal einen Ordner auf dem Server öffnen wollen? Dann darf dieser Name des Ordner NICHT an die index.php weitergeleitet werden. Um das zu erreichen verwende ich das Script aus der RealUrl-Dokumentation:&lt;br /&gt;
RewriteRule ^typo3$ - [L]&lt;br /&gt;
RewriteRule ^typo3/.*$ - [L]&lt;br /&gt;
RewriteRule ^uploads/.*$ - [L]&lt;br /&gt;
RewriteRule ^fileadmin/.*$ - [L]&lt;br /&gt;
RewriteRule ^typo3conf/.*$ - [L]&lt;br /&gt;
Hinweis&lt;br /&gt;
[L] bedeutet, dass nach dieser Umschreibung der URL keine weiteren Umschreibungen mehr ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Der Bindestrich (-) bedeutet, dass keine Umschreibung der URL stattfinden soll.&lt;br /&gt;
&lt;br /&gt;
Doppelter Content&lt;br /&gt;
Wer von Euch seine Seite schon mal mit www.seitwert.de bewertet hat, wird bestimmt schon mal über den Eintrag bzgl. doppelten Content/Inhalt gestoßen sein. So kommt es je nach Konfiguration vor, dass eine Seite wie sfroemken.de das Gleiche anzeigt wie www.sfroemken.de. Dieses &amp;quot;Problem&amp;quot; kann sich auch negativ auf die Position in den Suchergebnissen auswirken. Aber auch das lässt sich mit Hilfe der htaccess-Datei bereinigen:&lt;br /&gt;
&lt;br /&gt;
RewriteCond  %{HTTP_HOST} ^sfroemken\.de$ [NC]&lt;br /&gt;
RewriteRule ^(.*)$ www.sfroemken.de/$1 [R=301,L]&lt;br /&gt;
Erklärung&lt;br /&gt;
%{HTTP_HOST} kann in diesem Fall sfroemken.de oder aber auch www.sfroemken.de sein. Mit RewriteCond könnt Ihr nun überprüfen, ob der HTTP_HOST mit dem Wert sfroemken.de übereinstimmt. Dank [NC] soll die Groß- und Kleinschreibung bei diesem Vergleich nicht berücksichtigt werden.&lt;br /&gt;
&lt;br /&gt;
Wenn RewriteCond nun ein true zurück gibt, dann wird die Modifikation in RewriteRule ausgeführt. Alles was durch die Klammern markiert wurde, kann im zweiten Parameter mit $1 wiederverwendet werden. [R=301]: Das R steht für redirect und die 301 ist ein bestimmter Servercode, mit dem bestimmt wird, dass es sich bei dieser Weiterleitung um eine parmanente Weiterleitung handelt.&lt;br /&gt;
&lt;br /&gt;
So wird aus&lt;br /&gt;
&lt;br /&gt;
sfroemken.de/kontakt/index.php&lt;br /&gt;
ein&lt;br /&gt;
&lt;br /&gt;
www.sfroemken.de/kontakt/index.php&lt;br /&gt;
Subdomains&lt;br /&gt;
Bei Subdomains müssen wir das genau andersrum machen. Dort gibt es kein www. Da www.seitwert.de aber trotzdem überprüft, ob die Domain auch mit einem www davor erreichbar ist, müssen wir das folgendermaßen abfangen:&lt;br /&gt;
&lt;br /&gt;
RewriteCond  %{HTTP_HOST} ^www\.typo3\.sfroemken\.de$ [NC]&lt;br /&gt;
RewriteRule ^(.*)$ typo3.sfroemken.de/$1 [R=301,L]&lt;br /&gt;
Ordner&lt;br /&gt;
Leider haben sich viele Surfer daran gewöhnt Ordner auf einem Server ohne abschließendem Slash (/) anzugeben. Damit dieser Slash automatisch hinten dran gemacht wird, können wir folgendes Script verwenden:&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
RewriteRule (.*[^/])$ %{HTTP_HOST}/$1/ [L,R]&lt;br /&gt;
Erklärung&lt;br /&gt;
Die ersten beiden RewriteCond fragen ab, ob es sich bei der aufzurufenden URL nicht um eine Datei handelt und nicht um einen symbolischen Link. Wenn beides zutrifft, kann getrost ein zusätzlicher Slash hinten angefügt werden.&lt;br /&gt;
&lt;br /&gt;
Achtung&lt;br /&gt;
Wenn Ihr RealUrl so konfiguriert habt, dass Ihr URLs wie&lt;br /&gt;
&lt;br /&gt;
/kontakt/impressum.html&lt;br /&gt;
erhaltet, dann muss das Script noch etwas angepasst werden, dann ansonsten erhaltet Ihr eine URL wie diese hier:&lt;br /&gt;
&lt;br /&gt;
/kontakt/impressum.html/&lt;br /&gt;
Hier das angepasste Script:&lt;br /&gt;
&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} (^.htm$|^.html$)&lt;br /&gt;
RewriteRule (.*[^/])$ %{HTTP_HOST}/$1/ [L,R]&lt;br /&gt;
Heißt: Wenn die URL mit .htm oder .html endet, dann soll der zusätzliche Slash NICHT hinten dran gemacht werden.&lt;br /&gt;
&lt;br /&gt;
Index-Dateien in Ordnern&lt;br /&gt;
Je nach Projekt und Ordner kann es vorkommen, dass Du trotz RealUrl die Index-Dateien in bestimmten Ordnern ausführen möchtest:&lt;br /&gt;
&lt;br /&gt;
/fileadmin/projekt/download/index.php&lt;br /&gt;
Allerdings wird derzeit noch diese URL an die TYPO3-eigene index.php im Rootverzeichnis weitergeleitet. Um auch das zu unterbinden sind folgende 6 Zeilen vorgesehen:&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME}/index.html -f&lt;br /&gt;
RewriteRule / %{REQUEST_URI}/index.html [L]&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME}/index.htm -f&lt;br /&gt;
RewriteRule / %{REQUEST_URI}/index.htm [L]&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME}/index.php -f&lt;br /&gt;
RewriteRule / %{REQUEST_URI}/index.php [L]&lt;br /&gt;
URL-Modifikation für RealUrl&lt;br /&gt;
Dieses Script ist das wichtigste Script überhaupt für RealUrl. Hier wird nun endlich gesagt, dass alle Teile aus der URL an die TYPO3-eigene index.php weitergeleitet werden sollen zur Weiterverarbeitung durch RealUrl.&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-d&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
RewriteRule .* index.php&lt;br /&gt;
Hinweis&lt;br /&gt;
Je nach Art Eurer TYPO3-Installation könnte es sein, dass Eure index.php ein symbolischer Link ist. In diesem Fall müsst Ihr die letzt Zeile folgendermaßen ändern:&lt;br /&gt;
&lt;br /&gt;
RewriteRule .* /index.php&lt;br /&gt;
Scripmerger&lt;br /&gt;
Dieses Script benötigt Ihr nur, wenn Ihr die Extension scriptmerger verwenden wollt:&lt;br /&gt;
# Expires Header + Removal of ETag&lt;br /&gt;
&amp;lt;FilesMatch &amp;quot;\.(ico|png|gif|js|css|jpg|jpeg|swf)&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;IfModule mod_expires.c&amp;gt;&lt;br /&gt;
        ExpiresActive on&lt;br /&gt;
        ExpiresDefault &amp;quot;access plus 7 days&amp;quot;&lt;br /&gt;
        ExpiresDefault &amp;quot;access plus 2 months&amp;quot;&lt;br /&gt;
    &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# ETag&lt;br /&gt;
  FileETag MTime Size&lt;br /&gt;
  &amp;lt;IfModule mod_headers.c&amp;gt;&lt;br /&gt;
      FileETag none&lt;br /&gt;
      Header unset Last-Modified&lt;br /&gt;
    &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Compressed Content&lt;br /&gt;
&amp;lt;FilesMatch &amp;quot;\.gz\.(js|css)&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;IfModule mod_headers.c&amp;gt;&lt;br /&gt;
        Header set Content-Encoding gzip&lt;br /&gt;
    &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Shell Restriction auf all-inkl Server ===&lt;br /&gt;
Ab TYPO3 6 moniert das Install Tool das exec nicht augeführt werden darf. Es funktioniert wenn man die cgi Version von PHP nimmt. Das kann man per htaccess oder im KAS Backend einstellen.&lt;br /&gt;
&lt;br /&gt;
Beispiele.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AddHandler php55-cgi .php (sofern vom Server unterstützt)&lt;br /&gt;
AddHandler php54-cgi .php (sofern vom Server unterstützt)&lt;br /&gt;
AddHandler php53-cgi .php&lt;br /&gt;
AddHandler php52-cgi .php&lt;br /&gt;
AddHandler php5-cgi .php (Version entsprechend der PHP Apache-Modul Version)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHP Version auf Weiland Servern ===&lt;br /&gt;
 Über die PHP-Versionsauswahl im Kundenmenü können Sie die PHP-Version für eine Domain ändern. Folgende Anleitung erklärt, wie Sie die PHP Version für einzelne Verzeichnisse (und deren Unterverzeichnisse) ändern können.&lt;br /&gt;
&lt;br /&gt;
Das Verzeichnis kann dabei nur eine höhere PHP-Version erhalten, als die PHP-Version, die für die Domain im Kundenmenü eingestellt ist.&lt;br /&gt;
&lt;br /&gt;
Das bedeutet: Ist für die Domain PHP 5.6 im Kundenmenü eingestellt, können Sie für einzelne Verzeichnisse PHP 7.0 und höher einstellen, nicht jedoch niedrigere Versionen wie PHP 5.5. *&lt;br /&gt;
&lt;br /&gt;
Außerdem darf für die Domain kein Fast-CGI aktiviert sein.&lt;br /&gt;
&lt;br /&gt;
Um die PHP-Version für ein Verzeichnis zu ändern, legen Sie eine .htaccess-Datei mit folgender Anweisung in dem Verzeichnis ab. Die Anweisung ist abhängig von der PHP-Version, die Sie aktivieren möchten: &lt;br /&gt;
 AddType application/x-httpd-php72 .php&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Htaccess&amp;diff=25398</id>
		<title>Htaccess</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Htaccess&amp;diff=25398"/>
		<updated>2021-09-03T09:05:53Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: /* Weiterleitung mit .htaccess */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Anwendung von .htaccess - Dateien ==&lt;br /&gt;
=== Weiterführende Links: ===&lt;br /&gt;
https://jweiland.net/know-how/internet/htaccess-konfigurieren.html#c2756&lt;br /&gt;
&lt;br /&gt;
http://httpd.apache.org/docs/1.3/howto/htaccess.html&lt;br /&gt;
&lt;br /&gt;
von: http://www.uni-duesseldorf.de/Service/Webmaster/htaccess.php3 Juli 2006&lt;br /&gt;
&lt;br /&gt;
Referenz: Apache Manual: http://www.uni-duesseldorf.de/apache-manual/&lt;br /&gt;
&lt;br /&gt;
[[Apache Mod Rewrite Syntax]]&lt;br /&gt;
&lt;br /&gt;
=== Wozu braucht man das ?===&lt;br /&gt;
An wen ein HTTP-Server Dokumente herausgibt, welche spezielle Verarbeitung er u.U. bei einer spezifischen Anforderung (einem request) durchführt - all das wird zunächst durch eine von der Server-Software abhängigen Konfiguration bestimmt, die ein Administrator - ein Webmaster - eingerichtet hat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oft ist es aber wünschenswert, daß einzelne Verantwortliche für eine Dokumentenhierarchie auf dem Web-Server selbst ohne Intervention des Webmasters Setzungen vornehmen können, daß z.B. auf einzelne Dokumente oder alle in einem bestimmten Verzeichnis nur ein Zugriff aus bestimmten Domains oder mit verifiziertem Usernamen möglich ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beim Apache-HTTP-Server wie seinem Vorgänger, dem NCSA-httpd, gibt es diese Möglichkeiten durch die Einrichtung von .htaccess-Dateien in dem jeweiligen Verzeichnis. In der folgenden Darstellung wird als Referenz jeweils ein Verweis auf den entsprechenden Abschnitt in der lokale Kopie der Apache-Dokumentation für die Version 1.2 gegeben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Achtung:&amp;#039;&amp;#039;&amp;#039; In der Server-Konfiguration kann ein anderer Name als .htaccess vereinbart sein (AccesFileName-Direkt ive).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Zweiter Hinweis:&amp;#039;&amp;#039;&amp;#039; Die Datei muß für den HTTP-Server lesbar sein, z.B. dadurch erreicht, daß sie öffentlich lesbar ist:&lt;br /&gt;
&lt;br /&gt;
 chmod 644 .htaccess &lt;br /&gt;
&lt;br /&gt;
=== Zugriffsbeschränkung auf eine Domain === &lt;br /&gt;
==== für alle Dateien in einem Verzeichnis ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;.htaccess&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 order deny,allow&lt;br /&gt;
 deny  from all&lt;br /&gt;
 allow from .uni-duesseldorf.de 134.99 &lt;br /&gt;
&lt;br /&gt;
Alle Dateien in dem Verzeichnis werden nur an Clients ausgeliefert, die eine IP-Adresse beginnend mit 134.99 oder einen Hostnamen endend mit uni-duesseldorf.de besitzen; anderenfalls erfolgt eine Fehlermeldung des Servers (403 Forbidden).&lt;br /&gt;
&lt;br /&gt;
Natürlich genügt in vielen Fällen eine der Alternativen. Beachten Sie dabei die Unterschiede:&lt;br /&gt;
&lt;br /&gt;
* Die Angabe des Domain-Namens allein schließt - bewußt oder nicht - den Zugriff von PC&amp;#039;s aus, die nicht im Domain Name System (DNS) registriert sind.&lt;br /&gt;
* Die Angabe des IP-Subnetzes allein kann andere ausschließen, die organisatorisch zur gleichen Domain gehören, technisch aber in einem anderen Subnetz hängen. &lt;br /&gt;
&lt;br /&gt;
Wie lässt sich diese Zugriffsbeschränkung testen? Normalerweise benötigt man dazu einen Internet-Zugang über einen anderen Provider (T-Online, AOL, Compuserve etc.). Oder man benutzt einen Browser auf dem Server selbst z.B. in folgender Weise:&lt;br /&gt;
&lt;br /&gt;
 lynx http://localhost/Service/Webmaster/htaccess.phtml &lt;br /&gt;
&lt;br /&gt;
Der Zugriff erfolgt dann über das Loopback-Interface mit der IP-Adresse 127.0.0.1.&lt;br /&gt;
&lt;br /&gt;
Referenz: order, deny, allow. &lt;br /&gt;
&lt;br /&gt;
==== für einzelne Dateien ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;.htaccess&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Files huh*.html&amp;gt;&lt;br /&gt;
 order deny,allow&lt;br /&gt;
 deny  from all&lt;br /&gt;
 allow from .uni-duesseldorf.de 134.99&lt;br /&gt;
 &amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Zugriffsbeschränkung wie oben gilt jetzt nur für die Dateien, deren Namen auf das hinter Files angegebene Muster passen. Es kann ein einzelner Name angegeben werden oder ein Muster mit den Wildcard-Zeichen ? für ein beliebiges einzelnes Zeichen oder * für eine beliebige Folge von Zeichen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Schließlich sind auch feinere Muster über reguläre Ausdrücke möglich. Die Syntax der Files-Direktive dafür ist:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Files ~ &amp;quot;regexp&amp;quot;&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Referenz: &amp;lt;Files&amp;gt;, order, deny, allow.&lt;br /&gt;
&lt;br /&gt;
=== Zugriffsbeschränkung über Passwort ===&lt;br /&gt;
==== für ein Verzeichnis ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;.htaccess&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 AuthType Basic&lt;br /&gt;
 AuthName MeyersLeute&lt;br /&gt;
 AuthUserFile /home/meyer/passwd&lt;br /&gt;
 require valid-user&lt;br /&gt;
&lt;br /&gt;
Dokumente in einem Verzeichnis mit dieser .htaccess-Datei (oder einem Unterverzeichnis) können erst nach Eingabe eines gültigen Benutzernamen und Passwortes gelesen werden. Der Wert hinter AuthName wird vom Browser in der Dialog-Box für die Passwortabfrage angezeigt und dient gleichzeitig dazu, andere Dokumente mit dem gleichen Schutz zu erkennen und einmal eingelesene Werte für Username und Password ohne erneute Abfrage unmittelbar zu verwenden.&lt;br /&gt;
&lt;br /&gt;
Hinter AuthUserFile steht der Pfad der Passwortdatei, die die Benutzernamen und (verschlüsselten) Passwörter enthält. Sie sieht etwa so aus:&lt;br /&gt;
&lt;br /&gt;
 /home/meyer/passwd&lt;br /&gt;
&lt;br /&gt;
 meyer:xm.kPd4VJc3Fo&lt;br /&gt;
 mueller:eJFQCL8GftDXI&lt;br /&gt;
&lt;br /&gt;
Auch die Passwortdatei muß für den HTTP-Server lesbar sein. Gerade deshalb sollte sie niemals in demselben Bereich liegen wie die vom Server bedienten Dokumente, da sonst zumindest die gültigen Benutzernamen lesbar wären. (Aus diesem Grund müssen Sie aber u.U. daran denken, auch das entsprechende Verzeichnis - wie /home/meyer im Beispiel - für den HTTP-Server zumindest suchbar zu setzen, also etwa:&lt;br /&gt;
&lt;br /&gt;
    chmod 711 /home/meyer &lt;br /&gt;
&lt;br /&gt;
Angelegt und gepflegt werden kann die Passwortdatei mit dem Programm htpasswd:&lt;br /&gt;
&lt;br /&gt;
    htpasswd -c /home/meyer/passwd meyer&lt;br /&gt;
    htpasswd /home/meyer/passwd mueller &lt;br /&gt;
&lt;br /&gt;
Referenz: AuthType, AuthName, AuthUserFile, require.&lt;br /&gt;
&lt;br /&gt;
==== für einzelne Dateien ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;.htaccess&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 AuthType Basic&lt;br /&gt;
 AuthName MeyersLeute&lt;br /&gt;
 AuthUserFile /home/meyer/passwd&lt;br /&gt;
 &amp;lt;Files Huh*.html&amp;gt;&lt;br /&gt;
 require user meyer mueller&lt;br /&gt;
 &amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Kombination von 2. und 3. - Passwortschutz für einzelne Dateien in dem aktuellen Verzeichnis. Beim require wird hier noch eine andere Alternative gezeigt: die Aufzählung einzelner Benutzernamen aus der Passwortdatei. Wenn neue Benutzer in der Passwortdatei ergänzt werden, haben diese noch keinen Zugriff auf die so geschützten Seiten.&lt;br /&gt;
&lt;br /&gt;
Wenn die gleiche Liste von Benutzern an mehreren Stellen verwendet werden soll, ist die Definition der Liste über eine Gruppendatei empfehlenswert. Für diese dritte Alternative bzgl. der require-Direktive sind fogende Änderungen notwendig:&lt;br /&gt;
&lt;br /&gt;
1. In der .htaccess-Datei wird eine Gruppendatei angegeben:&lt;br /&gt;
 AuthGrouprFile /home/meyer/groups&lt;br /&gt;
Für den Ort der Ablage dieser Datei gelten dieselben Erwägungen wie für die Passwortdatei oben.&lt;br /&gt;
2. In der require-Direktive wird jetzt auf eine Gruppendefinition in der Gruppendatei Bezug genommen:&lt;br /&gt;
 require group meyers&lt;br /&gt;
3. Die Gruppendatei ist eine einfache Textdatei mit je einer Gruppendefinition pro Zeile in folgender Form: &lt;br /&gt;
&lt;br /&gt;
 /home/meyer/groups&lt;br /&gt;
 meyers: meyer mueller&lt;br /&gt;
&lt;br /&gt;
Referenz: AuthType, AuthName, AuthUserFile, AuthGroupFile, &amp;lt;Files&amp;gt;, require. &lt;br /&gt;
&lt;br /&gt;
===Spezielle Optionen===&lt;br /&gt;
==== automatischer Index (Directory Listing)====&lt;br /&gt;
ausführliche Infos hier: [[htaccess - Directory Listing]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;.htaccess&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Options +Indexes&lt;br /&gt;
&lt;br /&gt;
Mittels der Options-Direktive können - so von der globalen Server-Konfiguration her erlaubt - Voreinstellungen für Verarbeitungsoptionen für das aktuelle Verzeichnis und Unterverzeichnisse überschrieben werden.&lt;br /&gt;
&lt;br /&gt;
Die gezeigte Variante weist den Server an, bei der Referenz auf das aktuelle Verzeichnis oder ein Unterverzeichnis ein Directory-Listing als Index-Datei automatisch zu generieren. Er macht dies allerdings nur, wenn nicht schon eine Index-Datei (mit vordefiniertem Namen wie index.html) vorhanden ist. Ggf. kann man die hier bekannten Namen mit der Direktive&lt;br /&gt;
&lt;br /&gt;
    DirectoryIndex Welcome.html &lt;br /&gt;
&lt;br /&gt;
einschränken.&lt;br /&gt;
&lt;br /&gt;
Referenz: Options, DirectoryIndex.&lt;br /&gt;
&lt;br /&gt;
==== Automatischer Index mit User Auth ====&lt;br /&gt;
(Quelle Weiland s.o.)&lt;br /&gt;
Directory Listing&lt;br /&gt;
&lt;br /&gt;
Soll über einer geschützen Unterseite (z.B. fileadmin/downloads) des Internetauftritts ein Directory Listing realisiert werden, dann sollte die .htaccess wie folgt eingestellt werden:&lt;br /&gt;
&lt;br /&gt;
 AuthType Basic&lt;br /&gt;
 AuthName &amp;quot;system - &amp;quot;&lt;br /&gt;
 Options +Indexes&lt;br /&gt;
 IndexOptions +FancyIndexing&lt;br /&gt;
 AuthUserFile /*ihr_serverpfad/projektpfad/filadmin/downloads/.htpasswd&lt;br /&gt;
 AuthGroupFile /dev/null&lt;br /&gt;
 require valid-user&lt;br /&gt;
&lt;br /&gt;
* ihr_serverpfad  finden Sie in Ihrem Kundenmenu unter Technische Infos oder durch Eingabe des Befehls $PWD in der Shell.&lt;br /&gt;
&lt;br /&gt;
Den User mit verschlüseltem Passwort in dem Fall in der .htpasswd vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
Die Unterseite mit dem Directory Listing muss von der TYPO3 index.php ausgeschlossen werden und erreichen Sie über die .htaccess in dem Projektverzeichnis mit folgenden Angaben nach der RewriteEngine On:&lt;br /&gt;
&lt;br /&gt;
 RewriteRule ^fileadmin/downloads/$ - [L]&lt;br /&gt;
 RewriteRule ^fileadmin/downloads/.*$ - [L]&lt;br /&gt;
&lt;br /&gt;
==== Startdatei festlegen ====&lt;br /&gt;
Mit dem vorigen Beispiel kann man auch festlegen welche Dateien beim Aufruf eines Verzeichnisses (oder der Webadresse) an den Browser geliefert werden sollen. Manchmal hat man den Fall das die Startdatei eines CMS index.php heißt und bei Wartungsarbeiten die Datei index.html aufgerufen werden soll.&lt;br /&gt;
&lt;br /&gt;
 DirectoryIndex index.html index.php start.html&lt;br /&gt;
&lt;br /&gt;
weist den Apache an falls vorhanden die Datei index.html aufzurufen, wenn nicht die index.php und so weiter.&lt;br /&gt;
&lt;br /&gt;
Bei Wartungsarbeiten kann man nun einfach eine index.html aufspielen die bei Aufruf der Domain angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
==== PHP - Werte setzen ====&lt;br /&gt;
Wenn der Server das erlaubt kann man es folgendermaßen machen:&lt;br /&gt;
===== PHP Memory Limit =====&lt;br /&gt;
 php_value memory_limit 256M&lt;br /&gt;
===== PHP Execution Time =====&lt;br /&gt;
 php_value max_execution_time 240&lt;br /&gt;
&lt;br /&gt;
==== Error Reporting ====&lt;br /&gt;
===== Produktiv Betrieb =====&lt;br /&gt;
(Fehler unterdrückt aber protokolliert)&lt;br /&gt;
&lt;br /&gt;
 php_value error_reporting 2047&lt;br /&gt;
 php_value display_errors 0&lt;br /&gt;
 php_value log_errors 1&lt;br /&gt;
 php_value error_log /eigener/pfad/fehler.log&lt;br /&gt;
&lt;br /&gt;
===== Entwicklung =====&lt;br /&gt;
hier sollte display_errors auf 1 stehen&lt;br /&gt;
&lt;br /&gt;
siehe auch [[PHP - Error Reporting / Fehlerbehandlung]]&lt;br /&gt;
&lt;br /&gt;
siehe auch [[TYPO3 - Error Reporting / Fehlerbehandlung]]&lt;br /&gt;
&lt;br /&gt;
==== Skripte sperren ====&lt;br /&gt;
z.B. bei Überlastung durch ein Skript (hier im Beispiel meineDomain.de/ajax/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteCond %{REQUEST_URI}   (.*)ajax(.*)   [NC]&lt;br /&gt;
RewriteRule ^(.*)  - [F]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Browser Caching ==&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_expires.c&amp;gt;&lt;br /&gt;
ExpiresActive On&lt;br /&gt;
ExpiresByType text/html &amp;quot;access plus 500 seconds&amp;quot;&lt;br /&gt;
ExpiresByType image/gif &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType image/ico &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType image/jpeg &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType image/jpg &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType image/png &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType text/css &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType text/javascript &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType application/x-javascript &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType application/javascript &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Zugriff auf Ordner ==&lt;br /&gt;
=== Sperren ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# This file restricts access to the fileadmin/user_upload/_import_export_ directory. It is&lt;br /&gt;
# meant to protect temporary files which could contain sensible&lt;br /&gt;
# information. Please do not touch.&lt;br /&gt;
&lt;br /&gt;
# Apache &amp;lt; 2.3&lt;br /&gt;
&amp;lt;IfModule !mod_authz_core.c&amp;gt;&lt;br /&gt;
	Order allow,deny&lt;br /&gt;
	Deny from all&lt;br /&gt;
	Satisfy All&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Apache ≥ 2.3&lt;br /&gt;
&amp;lt;IfModule mod_authz_core.c&amp;gt;&lt;br /&gt;
	Require all denied&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weiterleitung mit .htaccess ==&lt;br /&gt;
=== Beispiele mit Fokus auf TYPO3 ===&lt;br /&gt;
Quelle  Weiland (s.o.)&lt;br /&gt;
====Weiterleitungen (Redirects)====&lt;br /&gt;
===== Common Cases =====&lt;br /&gt;
http auf https umleiten&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weiterleitung von http auf https mit Berücksichtigung der Subdomain (www.)&lt;br /&gt;
&lt;br /&gt;
Damit sowohl die Weiterleitung von http auf https, als auch die Weiterleitung von nicht www. auf www. aktiv wird, müssen Sie den folgenden Codeschnipsel in die .htaccess Datei Ihres Webprojekts einfügen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_rewrite.c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
&lt;br /&gt;
RewriteCond %{HTTP_HOST} !^www.domain.de$ [NC]&lt;br /&gt;
RewriteRule ^(.*)$ https://www.domain.de/$1 [L,R=301]&lt;br /&gt;
&lt;br /&gt;
RewriteCond %{SERVER_PORT} !=443&lt;br /&gt;
RewriteRule ^(.*)$ https://www.domain.de/$1 [R=301,L]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die Weiterleitung funktioniert jetzt wie folgt:&lt;br /&gt;
&lt;br /&gt;
http://www.domain.de wird auf https://www.domain.de weitergeleitet.&lt;br /&gt;
&lt;br /&gt;
http://domain.de wird auf https://www.domain.de weitergleitet.&lt;br /&gt;
&lt;br /&gt;
https://domain.de wird auf https://www.domain.de weitergeleitet.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Schreibweise ohne www. bevorzugen, können Sie natürlich das Weiterleitungsziel entsprechend anpassen. Dafür müssen Sie einfach die URL Angabe bei &amp;quot;RewriteRule&amp;quot; anpassen und auf die Version ohne www. verweisen.&lt;br /&gt;
&lt;br /&gt;
Einzelne Unterseiten weiterleiten&lt;br /&gt;
&lt;br /&gt;
Aufrufe einer Unterseite (z.B. a.html) auf eine andere Unterseite (z.B. b.html) innerhalb der selben Domain weiterleiten.&lt;br /&gt;
 Redirect 301 /a.html /b.html&lt;br /&gt;
&lt;br /&gt;
Ganzen Ordner / Verzeichnis weiterleiten&lt;br /&gt;
&lt;br /&gt;
Aufrufe eines Ordners (z.B. /a) auf einen anderen Ordner innerhalb der selben Domain (z.B. /b) weiterleiten. Die Weiterleitung wirkt sich auch auf alle Dateien innerhalb des Ordners /a aus, so wird z.B. der Aufruf von /a/test.html auf /b/test.html weitergeleitet.&lt;br /&gt;
 Redirect 301 /a /b&lt;br /&gt;
&lt;br /&gt;
Domain Weiterleitung: Ganze Domain umleiten&lt;br /&gt;
&lt;br /&gt;
Aufrufe einer Unterseite (URL) von Domain A auf die selbe Unterseite (URL) unter Domain B weiterleiten.&lt;br /&gt;
z.B. domain-a.de/test.html auf domain-b.de/test.html weiterleiten wobei dies nicht nur für test.html, sondern auch für alle weiteren Unterseiten gilt.&lt;br /&gt;
 Redirect 301 / http://www.domain-b.de/&lt;br /&gt;
&lt;br /&gt;
Alternative Lösung mittels RewriteCond / RewriteRule:&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{HTTP_HOST} domain-a.de$ [NC]&lt;br /&gt;
 RewriteRule ^(.*) http://www.domain-b.de/$1 [R=301,L]&lt;br /&gt;
&lt;br /&gt;
URLs ohne www. auf URLs mit www. weiterleiten&lt;br /&gt;
&lt;br /&gt;
Standard Domain definieren und Aufrufe einer URL ohne die Subdomain www. auf die entsprechende URL mit www. weiterleiten um z.B. doppelte Inhalte für Suchmaschinen zu vermeiden.&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^domain.de$ [NC]&lt;br /&gt;
 RewriteRule (.*) http://www.domain.de/$1 [R=301,L]&lt;br /&gt;
&lt;br /&gt;
Alle Unterseiten auf Startseite weiterleiten&lt;br /&gt;
&lt;br /&gt;
Alle Aufrufe auf Unterseiten einer Domain mit Ausnahme der index.html, der Style.css sowie aller Dateien im Ordner /img/ auf die Startseite weiterleiten.&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
 RewriteCond %{REQUEST_URI} !^/(index\.html|style\.css)?$ [NC]&lt;br /&gt;
 RewriteCond %{REQUEST_URI} !^/img(/|$) [NC]&lt;br /&gt;
 RewriteRule ^.*$ /index.html [L,R=301]&lt;br /&gt;
URL mit Parameter weiterleiten&lt;br /&gt;
&lt;br /&gt;
Aufrufe von URLs welche einen bestimmten Parameter (z.B. test) enthalten, unabhängig von dessen Wert, auf ein Verzeichnis (z.B. /verzeichnis/) oder eine Unterseite weiterleiten.&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{QUERY_STRING} ^test=(.*)$&lt;br /&gt;
 RewriteRule ^(.*)$ /verzeichnis/? [R=301,L]&lt;br /&gt;
&lt;br /&gt;
URLs mit einem bestimmten Parameterwert weiterleiten (In diesem Fall Wert &amp;quot;test&amp;quot; für den Parameter &amp;quot;s&amp;quot; auf das Verzeichnis &amp;quot;test&amp;quot; weiterleiten).&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{QUERY_STRING} ^s=test$&lt;br /&gt;
 RewriteRule ^(.*)$ /test/? [R=301,L]&lt;br /&gt;
Parameter aus URL entfernen&lt;br /&gt;
&lt;br /&gt;
Aufrufe von URLs welche einen bestimmten Parameter (z.B. www.domain.de/verzeichnis/?test=...) enthalten, unabhängig von dessen Wert, auf die selbe URL ohne Parameter am Ende (z.B. www.domain.de/verzeichnis/) weiterleiten bzw. den den Parameter aus der URL entfernen. Falls die Regel nur für einen bestimmten Parameter Wert gelten soll, kann der Code analog zum vorherigen Beispiel modifiziert werden.&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{QUERY_STRING} test=(.*)$&lt;br /&gt;
 RewriteRule ^(.*)$ /$1? [R=301,L]&lt;br /&gt;
&lt;br /&gt;
===== Allgemeines =====&lt;br /&gt;
&lt;br /&gt;
Die Weiterleitung von Domains und Anfragen zu einzelnen Webseiten ist eine der Hauptanwendungen der .htaccess Datei. Das notwendige Apache Modul mod_rewrite ist in unseren Hosting Tarifen vorhanden. &lt;br /&gt;
&lt;br /&gt;
Die Weiterleitung muss jedoch in der .htaccess Datei zunächst mit folgendem Eintrag aktiviert werden (in den weiteren Beispielen haben wir diese Zeile weggelassen):&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
301 oder 302 Weiterleitung?&lt;br /&gt;
&lt;br /&gt;
Der Weiterleitung (Redirect) sollte man noch einen Statuscode mitgeben: 301 oder 302. Worin liegt der Unterschied? &lt;br /&gt;
&lt;br /&gt;
 301: die Weiterleitung ist dauerhaft, z.B. weil die Navigationsstruktur einer Webseite umgestellt wurde&lt;br /&gt;
&lt;br /&gt;
 302: die Weiterleitung erfolgt nur vorübergehend, anschließend gilt wieder die bisherige Adresse&lt;br /&gt;
&lt;br /&gt;
Am Ende der RewriteRule Zeile wird der Code für die Weiterleitung (Redirect) in eckigen Klammern angegeben. Mit dem zusätzlichen Parameter L (Letzter, Last) kann man festlegen, dass die weiteren Anweisungen in der .htaccess Datei ignoriert werden sollen. Hierzu ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
 RewriteRule ^neues\.html$ /aktuelles.html [R=301,L]&lt;br /&gt;
Damit wird die Seite domain.tld/neues.html dauerhaft auf domain.tlld/aktuelles.htmlweitergeleitet.&lt;br /&gt;
&lt;br /&gt;
Die Schreibweise der Rewrite Regeln basiert dabei auf &amp;quot;Regulären Ausdrücken&amp;quot; (Regular Expressions, regex). &lt;br /&gt;
&lt;br /&gt;
Mit den Zeichen ^ und $ wird Anfang und Ende der umzuleitenden Seite gekennzeichnet. Der Punkt . steht in regulären Ausdrücken für ein beliebiges Zeichen, wenn wir wirklich einen Punkt meinen, dann wird dies mit einem Backslash \ gekennzeichnet (\ bedeutet also: exakt das nächste Zeichen).&lt;br /&gt;
&lt;br /&gt;
====Besonderheit: Anker auf einer Seite====&lt;br /&gt;
&lt;br /&gt;
Auf einer Webseite können &amp;quot;Anker&amp;quot; als Sprungmarke gesetzt sein. Beim Aufruf wird im Browser nicht auf den Anfang der Seite sondern direkt zum Ankerpunkt gesprungen. Der Anker wird durch ein Hash-Zeichen # in der URL gefolgt vom Namen der Sprungmarke gekennzeichnet. Beispiel für eine Adresse mit Anker:&lt;br /&gt;
&lt;br /&gt;
 domain.tld/aktuelles.html#artikel25&lt;br /&gt;
Soll per .htaccess Weiterleitung direkt auf eine Sprungmarke verwiesen werden, muss der zusätzliche Parameter NE (No Encoding) in eckigen Klammern angegeben werden:&lt;br /&gt;
&lt;br /&gt;
 RewriteRule ^neues\.html$ /aktuelles.html#artikel25 [R=301,L,NE]&lt;br /&gt;
Domain auf verschlüsselte Verbindung umleiten&lt;br /&gt;
&lt;br /&gt;
Sollen alle Seiten einer Domain ausschließlich über eine SSL-Verbindung aufgerufen werden, so kann dies über einen Eintrag in der .htaccess Datei im Startverzeichnis der Domain eingerichtet werden:&lt;br /&gt;
&lt;br /&gt;
 RewriteCond %{SERVER_PORT} !^443$&lt;br /&gt;
 RewriteRule (.*) https://%{HTTP_HOST}/$1 [L]&lt;br /&gt;
In der ersten Zeile wird die Funktion zum Umschreiben von URLs im Apache Webserver aktiviert. In der zweiten Zeile wird die Bedingung definiert &amp;quot;Wenn der Aufruf nicht auf Port 443 erfolgt&amp;quot; (Port 443 wird für SSL-Verschlüsselung verwendet, Port 80 für unverschlüsselte Aufrufe). Zeile 3 ist die Regel für das Umschreiben der URL. Wenn die Bedingung aus Zeile 2 zutrifft, werden die Aufrufe einer beliebigen Seite auf die gleiche Domain (${HTTP_HOST}) jedoch über das https:// Protokoll umgeleitet. Mit /$1 wird die ursprüngliche URL (z.B. impressum.html) an den Domainnamen angefügt. Mit dem Parameter [L] wird angegeben, dass das Umschreiben der URLs hier enden soll, weitere Zeilen in der .htaccess Datei werden also ignoriert.&lt;br /&gt;
&lt;br /&gt;
====Domain name-of-domain.net nach name-der-domain.de umleiten====&lt;br /&gt;
&lt;br /&gt;
Oftmals werden für ein Projekt mehrere Domains registriert, um verschiedene Schreibweisen abzudecken. Nach außen wird eine Hauptdomain kommunziert (Beispiel: name-der-domain.de als Hautpdomain, dazu name-of-domain.net als Zusatzdomains). &lt;br /&gt;
&lt;br /&gt;
Mit folgendem Eintrag in der .htaccess Datei werden alle Aufrufe für name-of-domain.net nach name-der-domain.de weitergeleitet:&lt;br /&gt;
&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^(www\.)?name-of-domain\.net$ [NC]&lt;br /&gt;
 RewriteRule ^(.*)$ http://www.name-der-domain.de/$1 [R=301,L]&lt;br /&gt;
Die Weiterleitung nach name-der-domain.de erfolgt dabei mit dem Statuscode 301 (permanent), so dass auch in Suchmaschinen auf Dauer nur diese erscheint. Dadurch werden Probleme mit &amp;quot;doppeltem Inhalt&amp;quot; (Duplicate Content) vermieden. Alle bei der ursprünglichen Domain übermittelten Parameter werden an die Zieldomain weitergegeben.&lt;br /&gt;
&lt;br /&gt;
====Einer Domain immer www. voranstellen====&lt;br /&gt;
&lt;br /&gt;
Mit folgendem Eintrag in der .htaccess Datei werden alle Aufrufe für eine Domain ohne www auf die Variante mit www weitergeleitet:&lt;br /&gt;
&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^name-der-domain\.de$ [NC]&lt;br /&gt;
 RewriteRule ^(.*)$ http://www.name-der-domain.de/$1 [R=301,L]&lt;br /&gt;
Die Weiterleitung nach www.name-der-domain.de erfolgt dabei mit dem Statuscode 301 (permanent), so dass auch in Suchmaschinen auf Dauer nur diese erscheint.&lt;br /&gt;
&lt;br /&gt;
====Domain auf eine Seite leiten====&lt;br /&gt;
&lt;br /&gt;
Bestimmte Domains oder Subdomains sollen entweder mit oder ohne www auf eine bestimmte Unterseite weitergeleitet werden.&lt;br /&gt;
&lt;br /&gt;
Dazu fügen Sie folgende Zeilen in Ihre .htaccess ein:&lt;br /&gt;
&lt;br /&gt;
 #Ohne realurl: &lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^(www\.)?name-der-domain\.de &lt;br /&gt;
 RewriteRule ^$ /index.php?id=85 &lt;br /&gt;
&lt;br /&gt;
 #oder realurl/simulatestatic mit html Suffix: &lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^(www\.)?name-der-domain\.de &lt;br /&gt;
 RewriteRule ^$ /unterseite.html &lt;br /&gt;
&lt;br /&gt;
 #oder realurl ohne html Suffix: &lt;br /&gt;
&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^(www\.)?name-der-domain\.de &lt;br /&gt;
 RewriteRule ^$ /unterseite/ &lt;br /&gt;
&lt;br /&gt;
====Weiterleitung auf eine andere Domain zu einer Unterseite====&lt;br /&gt;
&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^(www\.)?name-of-domain\.net [NC]&lt;br /&gt;
 RewriteRule ^(.*)$ http://www.name-der-domain.de/unterseite.hmtl [R=301,L] &lt;br /&gt;
 Redirect mit ? in der URL&lt;br /&gt;
&lt;br /&gt;
http://www.domainname.de/index.php?id=7&lt;br /&gt;
soll nach&lt;br /&gt;
&lt;br /&gt;
http://www.domainname.de/impressum.html&lt;br /&gt;
umgeleitet werden. Das Problem ist das ? in der alten URL und muss per QUERY_STRING in der Condition abgefragt werden. &lt;br /&gt;
Lösung:&lt;br /&gt;
&lt;br /&gt;
 RewriteCond %{QUERY_STRING} ^id=7$&lt;br /&gt;
 RewriteRule ^.*$ http://www.domainname.de/impressum.html? [L,R=301]&lt;br /&gt;
Wichtig ist auch der Browser-Cache. Der sollte unbedingt geleert werden, denn wenn ein Aufruf noch im Cache drin ist kann dadurch u.U. immer auf die falsche Seite leiten.&lt;br /&gt;
&lt;br /&gt;
So verhindert man, dass alte durch einen Umzug oder Neuprogrammierung nicht mehr vorhandene URLs in den Suchmaschinen zu einem schlechteren Ranking&lt;br /&gt;
&lt;br /&gt;
=== Weitere Beispiele (älter) ===&lt;br /&gt;
&lt;br /&gt;
Hinweis: eine Alternative hierfür ist eine PHP Weiterleitung ([[PHP - Tipps und Tricks]])&lt;br /&gt;
Quelle Dr.Web 28.12.2006&lt;br /&gt;
&lt;br /&gt;
Sie können sowohl Zugriffe auf bestimmte Dateien als auch auf Verzeichnisse bequem weiterleiten. Das klappt innerhalb der eigenen Domain, aber auch mit externen Verweisen.&lt;br /&gt;
&lt;br /&gt;
Die Datei .htaccess kann mit jedem Text-Editor bearbeitet werden. Eine Umleitung könnte so aussehen:&lt;br /&gt;
&lt;br /&gt;
 Redirect /beispielverzeichnis http://www.drweb.de&lt;br /&gt;
&lt;br /&gt;
Ruft jemand die URL http://www.drweb.de/beispielverzeichnis auf landet er ohne weiteren Zwischenstopp direkt auf der Startseite.&lt;br /&gt;
&lt;br /&gt;
Mit Einzeldateien klappt es auch:&lt;br /&gt;
&lt;br /&gt;
 Redirect /beispielseite.shtml http://www.drweb.de&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
 Redirect /beispielseite.shtml neueseite.shtml&lt;br /&gt;
&lt;br /&gt;
Wer mag, kann die gesamte Domain auf eine andere umleiten&lt;br /&gt;
&lt;br /&gt;
 Redirect / http://www.drweb.de/&lt;br /&gt;
&lt;br /&gt;
Nützlich während Bauarbeiten, bei Reparaturen oder wenn Dateien durch andere ersetzt wurden. Da die Umleitung serverseitig geschieht, spielt der Browser des Besuchers keine Rolle.&lt;br /&gt;
&lt;br /&gt;
Weitere nützliche Beispiele:&lt;br /&gt;
&lt;br /&gt;
Den Domainnamen ohne www auf den mit www umleiten. Es wird der Code 301 mitgegeben.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RewriteEngine on&lt;br /&gt;
RewriteCond %{HTTP_HOST} !^www\. [NC]&lt;br /&gt;
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Weiterleitung auf sichere Verbindung (https) ===&lt;br /&gt;
&lt;br /&gt;
== Umleitung auf https ==&lt;br /&gt;
Sichere Seiten sind seid 2019 Standard und quasi Pflicht. Mit diesem Code kann man von http auf https weiterleiten und gibt einen 301 (Moved Permanently) Header mit.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_rewrite.c&amp;gt;&lt;br /&gt;
  # Enable URL rewriting&lt;br /&gt;
  RewriteEngine On&lt;br /&gt;
  # Redirect to https&lt;br /&gt;
  RewriteCond %{SERVER_PORT} !^443$&lt;br /&gt;
  RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Moved Permanently 301 Redirect ===&lt;br /&gt;
Quelle:http://www.fladi.de/2008/04/28/howto-webseiten-redirect-mit-301/ (25.7.2008)&lt;br /&gt;
&lt;br /&gt;
Was ist ein 301 redirect?&lt;br /&gt;
&lt;br /&gt;
301 redirect ist die wohl beste Möglichkeit das aktuelle Suchmaschinenranking beim Umzug einer Seite oder des gesamten Webauftritts zu behalten. Der Code “301″ steht für “moved permanently” (dauerhaft verschoben). Ein solches Redirect wird in der .htaccess Datei eintragen. Es trägt die Form (alles in einer Zeile):&lt;br /&gt;
&lt;br /&gt;
 redirect 301 pfad/alte/seite/datei.html http://www.domain.de/pfad/neue/seite/datei.html &lt;br /&gt;
&lt;br /&gt;
Beachte, kein “http://www” in das erste Statement zu schreiben. Es muss der komplette Pfad vom Root deines Webservers angegeben werden. Schauen wir uns die Zeile nun nochmal genauer an:&lt;br /&gt;
&lt;br /&gt;
    * “redirect 301″ - die eigentliche Anweisung für den Webserver&lt;br /&gt;
    * “/pfad/alte/seite/datei.html” - die Seite die umgeleitet werden soll&lt;br /&gt;
    * “http://www.domain.de/pfad/neue/seite.datei.html” - die komplette neue URL&lt;br /&gt;
&lt;br /&gt;
Wie reagiert nun ein Suchmaschinen-Spider auf eine solche Umleitung? Die .htaccess wird ja nicht vom Spider ausgelesen, sondern vom Webserver “ausgeführt”. Der Spider jedoch erkennt den Statuscode, den der Webserver liefert. Beim nächsten Update seiner Datenbank sollte die Suchmaschine nun die alte URL aus dem Index werfen und die neue aufnehmen. Häufig kommt es aber auch vor, dass alte und neue URL gemischt auftauchen. Auch leichte Änderungen im Pagerank können auftreten. Es dauert so ca. 6-8 Wochen bis sich die Änderungen an der Seite auch in den Suchergebnissen niederschlagen.&lt;br /&gt;
&lt;br /&gt;
Weitere Möglichkeiten von 301 redirect:&lt;br /&gt;
&lt;br /&gt;
   1. Um ALLE Dateien Deiner Domain mithilfe einer .htaccess umzuleiten kannst Du (auf einem Unix/Linux-Webserver) i.d.R. folgendes verwenden:&lt;br /&gt;
 redirect 301 ^(.*)$ http://www.domain.de&lt;br /&gt;
 redirectMatch permanent ^(.*)$ http://www.domain.de&lt;br /&gt;
&lt;br /&gt;
Um Deine alte Startseite (index.html) umzuleiten:&lt;br /&gt;
 redirect 301 /index.html http://www.domain.de/index.html&lt;br /&gt;
 redirect permanent /index.html http://www.domain.de/index.html&lt;br /&gt;
&lt;br /&gt;
2. Wenn Du http://domain.de auf http://www.domain.de umleiten möchtest und mod_rewrite auf dem Webserver verfügbar ist, erreichst Du dies durch folgende .htaccess:&lt;br /&gt;
&lt;br /&gt;
 Options +FollowSymLinks&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^domain\.de&lt;br /&gt;
 RewriteRule ^(.*)$ http://www.domain.de/$1 [R=permanent,L]&lt;br /&gt;
&lt;br /&gt;
 oder&lt;br /&gt;
&lt;br /&gt;
 Options +FollowSymLinks&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^domain\.de$ [NC]&lt;br /&gt;
 RewriteRule ^(.*)$ http://www.domain.de/$1 [R=301,L]&lt;br /&gt;
&lt;br /&gt;
3. Alle .html Dateien auf .php Dateien umzuleiten ist durch mod_rewrite auch kein großes Problem:&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
 RewriteRule (.*).html$ /$1.php&lt;br /&gt;
&lt;br /&gt;
4. Um ein Verzeichnis und alles darunter umzuleiten:&lt;br /&gt;
&lt;br /&gt;
 redirectMatch 301 ^/verzeichnis-alt/(.*) http://www.domain.de/verzeichnis-neu/&lt;br /&gt;
&lt;br /&gt;
=== Warum nicht per META-Tag redirect machen? ===&lt;br /&gt;
&lt;br /&gt;
Die Umleitung per META-Tag erfolgt direkt in der aufgerufenen Seite. Dort wird im HEAD-Teil&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;meta http-equiv=”refresh” content=”0; url=http://www.domain.de/”&amp;gt;&lt;br /&gt;
eingetragen. Hierbei bewirkt das “content=10″, dass der Browser nach 10 Sekunden die darauffolgende URL aufruft. Wenn man “content=0″ einträgt wird die Umleitung sofort ausgeführt. Ein paar alte Browser unterstützen diese Art der Umleitung nicht. Deshalb ist es besser noch zusätzlich den Link (neue Domain) mit anzugeben.&lt;br /&gt;
&lt;br /&gt;
Technisch gesehen liefert die angefragte Seite, wie auch die Seite auf die umgeleitet wird, einen Statuscode “200 OK” zurück. Es sind also zwei unabhängige Seiten. Dementsprechend versucht die Suchmaschinen auch beide Seiten zu indizieren. Hier genau liegt aber das Problem. Denn der Spider des Suchmaschinenbetreibers erkennt die Umleitung und wertet Deine Seite deshalb u.U. ab, da es sich um eine beliebte SPAM-Methode handelt. So könnte man 1000 Domains mit solchen Seiten und jeder Menge Keywords einrichten. Echte Besucher (kein Spider) werden umgeleitet auf die eigentliche Seite. Indiziert wird aber nicht nur die eigentliche Seite sondern auch die 1000 Domains mit Keywords, die meist gar nichts mit dem eingentlichen Inhalt zu tun haben.&lt;br /&gt;
&lt;br /&gt;
Beim 301 redirect wird hingegen nur die echte Zielseite in den Index aufgenommen und durch den Statuscode kann der Suchmaschinenbetreiber zusätzlich noch die veralteten Seite aus dem Index werfen. Dies ist also der beste Weg um alte Seiten auf neue umzuleiten und gleichzeitig wird auch der Page Rank mit übertragen.&lt;br /&gt;
&lt;br /&gt;
===Weiterleitung über IP===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Options +FollowSymlinks&lt;br /&gt;
RewriteEngine on&lt;br /&gt;
&lt;br /&gt;
#IP Bedingung&lt;br /&gt;
RewriteCond %{REMOTE_HOST} ^85\.13\.128\.137&lt;br /&gt;
&lt;br /&gt;
#Zielseite erlauben&lt;br /&gt;
RewriteCond %{REQUEST_URI} !/ip-remote\.php$&lt;br /&gt;
&lt;br /&gt;
#Umleiten&lt;br /&gt;
#RewriteRule ^/* http://demo.webmynet.de/ip-remote.php [R,NE,NC]&lt;br /&gt;
RewriteRule /(.*)$ /ip-remote.php [R=302,L]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Erlaubte Anweisungen in .htaccess-Dateien ==&lt;br /&gt;
&lt;br /&gt;
http://de.selfhtml.org/servercgi/server/htaccess.htm&lt;br /&gt;
&lt;br /&gt;
Auszug (Datum des Zugriffs: 10.9.2007): &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Die Anweisung AllowOverride kann nicht innerhalb einer .htaccess notiert werden, sondern wird ausschließlich vom Server-Administrator in der zentralen Konfigurationsdatei vorgegeben. Um den AllowOverride-Wert in Erfahrung zu bringen, benötigen Sie Einsicht in die Serverkonfiguration. Kontaktieren Sie dazu gegebenenfalls Ihren Webhosting-Provider. Dieser kann den Wert auch ändern, falls Sie bestimmte bisher nicht erlaubte Anweisungen verwenden möchten. Im einzelnen gibt es dafür folgende mögliche Werte:&lt;br /&gt;
&lt;br /&gt;
    * Mit AllowOverride None wird der Webserver angewiesen, .htaccess-Dateien zu ignorieren. Das ist im Übrigen die Voreinstellung.&lt;br /&gt;
    * Mit AllowOverride All wird festgelegt, dass in einer .htaccess-Datei (so gut wie) sämtliche zentrale Vorgaben überschrieben und damit abgeändert werden dürfen. Das kann bedeuten, dass Vorhaben, die eigentlich verboten sind (beispielsweise die Ausführung von CGI-Scripts), mit Hilfe einer .htaccess-Datei erlaubt werden. Als Server-Administrator werden Sie diese Anweisung also nur sehr vorsichtig einsetzen.&lt;br /&gt;
    * Mit AllowOverride Options wird festgelegt, dass in einer .htaccess-Datei nach unten Anweisungen zur Steuerung spezieller Verzeichniseigenschaften zulässig sind.&lt;br /&gt;
    * Mit AllowOverride Limit wird festgelegt, dass in einer .htaccess-Datei nach unten Zugriffe von bestimmten Hosts erlaubt oder untersagt werden können.&lt;br /&gt;
    * Mit AllowOverride Indexes wird festgelegt, dass in einer .htaccess-Datei nach unten Anweisungen zur Steuerung von Verzeichnisindizes zulässig sind.&lt;br /&gt;
    * Mit AllowOverride FileInfo wird festgelegt, dass in einer .htaccess-Datei Anweisungen zur Akzeptanz bestimmter Dokumenttypen zulässig sind - beispielsweie, um nach unten Individuelle Fehlermeldungen ausgeben zu können.&lt;br /&gt;
    * Mit AllowOverride AuthConfig wird festgelegt, dass in einer .htaccess-Datei Autorisierungsanweisungen stehen dürfen - das betrifft beispielsweise Regelungen zum nach unten Passwortschutz.&lt;br /&gt;
&lt;br /&gt;
Diese Werte können auch miteinander kombiniert werden. All ist der mächtigste Parameter, mit dem alles das zugelassen wird, was die anderen Parameter steuern.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Ändern muß natürlich der Server neu gestartet werden (bei Debian: apache restart)&lt;br /&gt;
&lt;br /&gt;
==IP Adressen sperren==&lt;br /&gt;
&lt;br /&gt;
Manchmal ist es notwendig, bestimmte IP Adressen vom Aufruf der Webseite auszusperren, z.B. bei einem Angriffsversuch auf die Webseite. Über folgenden Eintrag in der .htaccess Datei (z.B. vor dem Eintrag &amp;#039;RewriteEngine On&amp;#039;) im Startverzeichnis der Seite lassen sich unerwünschte Besucher abweisen:&lt;br /&gt;
&lt;br /&gt;
 order allow,deny &lt;br /&gt;
 deny from 192.168.2.17 &lt;br /&gt;
 deny from 10.10.20.63 &lt;br /&gt;
 allow from all&lt;br /&gt;
Bei mehreren IP Adressen wird jede in eine eigene Zeile eingetragen. Die Einstellung gilt auch für alle Unterverzeichnisse. Wenn jemand mit einer gesperrten Adresse versucht, die Seite aufzurufen, erhält er einen 403 Fehlercode.&lt;br /&gt;
&lt;br /&gt;
==HTML5 Videos / bestimmte Dateitypen zulassen ==&lt;br /&gt;
&lt;br /&gt;
Falls es in einzelnen Browsern zu Problemen beim Abspielen von per HTML5 eingebundenen Videos kommt, helfen eventuell folgende Zeilen in der .htaccess Datei im Projektverzeichnis:&lt;br /&gt;
&lt;br /&gt;
 AddType video/ogg .ogm &lt;br /&gt;
 AddType video/ogg .ogv &lt;br /&gt;
 AddType video/ogg .ogg &lt;br /&gt;
 AddType video/webm .webm &lt;br /&gt;
 AddType audio/webm .weba &lt;br /&gt;
 AddType video/mp4 .mp4 &lt;br /&gt;
 AddType video/x-m4v .m4v&lt;br /&gt;
&lt;br /&gt;
== htaccess für Typo3 ==&lt;br /&gt;
&lt;br /&gt;
http://www.typo3lexikon.de/server/htaccess.html (11/2014)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.htaccess für TYPO3&lt;br /&gt;
Ich möchte auf dieser Seite nicht erklären wie .htaccess-Dateien erstellt werden. Nein. Davon gibt es schon zu genüge Dokumentationen im Web:&lt;br /&gt;
&lt;br /&gt;
Allgemeines zu htaccess&lt;br /&gt;
&lt;br /&gt;
URLs manipulieren&lt;br /&gt;
&lt;br /&gt;
Reguläre Ausdrücke&lt;br /&gt;
&lt;br /&gt;
htaccess Beispiele&lt;br /&gt;
&lt;br /&gt;
Auf dieser Seite geht es mehr um das Zusammenspiel von TYPO3 und htaccess-Dateien gerade in Bezug unter der Verwendung von der Extension RealUrl. In den nächsten Zeilen werde ich Euch meine htaccess-Datei in Detail näher erklären:&lt;br /&gt;
&lt;br /&gt;
RewriteEngine&lt;br /&gt;
Mit RewriteEngine kannst Du das Modifizieren von URLs de- bzw. aktivieren. Erst wenn diese Option aktiviert ist, kannst du z.B. alle Anfragen, die an Deinen Server gesendet werden auf eine völlig andere Webseite umleiten.&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
Bestimmte Verzeichnisse nicht umschreiben&lt;br /&gt;
Wenn Ihr RealUrl installiert habt, dann erhaltet Ihr je nach Konfiguration URLs wie&lt;br /&gt;
&lt;br /&gt;
/meine-seite/kontakt/impressum.html&lt;br /&gt;
Dabei sind die vermeintlichen Ordner gar keine echten Ordner auf dem Server, sondern Informationen, die an die index.php weitergeleitet werden, um dann die gewünschte Seite aufrufen zu können. Was aber, wenn wir wirklich mal einen Ordner auf dem Server öffnen wollen? Dann darf dieser Name des Ordner NICHT an die index.php weitergeleitet werden. Um das zu erreichen verwende ich das Script aus der RealUrl-Dokumentation:&lt;br /&gt;
RewriteRule ^typo3$ - [L]&lt;br /&gt;
RewriteRule ^typo3/.*$ - [L]&lt;br /&gt;
RewriteRule ^uploads/.*$ - [L]&lt;br /&gt;
RewriteRule ^fileadmin/.*$ - [L]&lt;br /&gt;
RewriteRule ^typo3conf/.*$ - [L]&lt;br /&gt;
Hinweis&lt;br /&gt;
[L] bedeutet, dass nach dieser Umschreibung der URL keine weiteren Umschreibungen mehr ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Der Bindestrich (-) bedeutet, dass keine Umschreibung der URL stattfinden soll.&lt;br /&gt;
&lt;br /&gt;
Doppelter Content&lt;br /&gt;
Wer von Euch seine Seite schon mal mit www.seitwert.de bewertet hat, wird bestimmt schon mal über den Eintrag bzgl. doppelten Content/Inhalt gestoßen sein. So kommt es je nach Konfiguration vor, dass eine Seite wie sfroemken.de das Gleiche anzeigt wie www.sfroemken.de. Dieses &amp;quot;Problem&amp;quot; kann sich auch negativ auf die Position in den Suchergebnissen auswirken. Aber auch das lässt sich mit Hilfe der htaccess-Datei bereinigen:&lt;br /&gt;
&lt;br /&gt;
RewriteCond  %{HTTP_HOST} ^sfroemken\.de$ [NC]&lt;br /&gt;
RewriteRule ^(.*)$ www.sfroemken.de/$1 [R=301,L]&lt;br /&gt;
Erklärung&lt;br /&gt;
%{HTTP_HOST} kann in diesem Fall sfroemken.de oder aber auch www.sfroemken.de sein. Mit RewriteCond könnt Ihr nun überprüfen, ob der HTTP_HOST mit dem Wert sfroemken.de übereinstimmt. Dank [NC] soll die Groß- und Kleinschreibung bei diesem Vergleich nicht berücksichtigt werden.&lt;br /&gt;
&lt;br /&gt;
Wenn RewriteCond nun ein true zurück gibt, dann wird die Modifikation in RewriteRule ausgeführt. Alles was durch die Klammern markiert wurde, kann im zweiten Parameter mit $1 wiederverwendet werden. [R=301]: Das R steht für redirect und die 301 ist ein bestimmter Servercode, mit dem bestimmt wird, dass es sich bei dieser Weiterleitung um eine parmanente Weiterleitung handelt.&lt;br /&gt;
&lt;br /&gt;
So wird aus&lt;br /&gt;
&lt;br /&gt;
sfroemken.de/kontakt/index.php&lt;br /&gt;
ein&lt;br /&gt;
&lt;br /&gt;
www.sfroemken.de/kontakt/index.php&lt;br /&gt;
Subdomains&lt;br /&gt;
Bei Subdomains müssen wir das genau andersrum machen. Dort gibt es kein www. Da www.seitwert.de aber trotzdem überprüft, ob die Domain auch mit einem www davor erreichbar ist, müssen wir das folgendermaßen abfangen:&lt;br /&gt;
&lt;br /&gt;
RewriteCond  %{HTTP_HOST} ^www\.typo3\.sfroemken\.de$ [NC]&lt;br /&gt;
RewriteRule ^(.*)$ typo3.sfroemken.de/$1 [R=301,L]&lt;br /&gt;
Ordner&lt;br /&gt;
Leider haben sich viele Surfer daran gewöhnt Ordner auf einem Server ohne abschließendem Slash (/) anzugeben. Damit dieser Slash automatisch hinten dran gemacht wird, können wir folgendes Script verwenden:&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
RewriteRule (.*[^/])$ %{HTTP_HOST}/$1/ [L,R]&lt;br /&gt;
Erklärung&lt;br /&gt;
Die ersten beiden RewriteCond fragen ab, ob es sich bei der aufzurufenden URL nicht um eine Datei handelt und nicht um einen symbolischen Link. Wenn beides zutrifft, kann getrost ein zusätzlicher Slash hinten angefügt werden.&lt;br /&gt;
&lt;br /&gt;
Achtung&lt;br /&gt;
Wenn Ihr RealUrl so konfiguriert habt, dass Ihr URLs wie&lt;br /&gt;
&lt;br /&gt;
/kontakt/impressum.html&lt;br /&gt;
erhaltet, dann muss das Script noch etwas angepasst werden, dann ansonsten erhaltet Ihr eine URL wie diese hier:&lt;br /&gt;
&lt;br /&gt;
/kontakt/impressum.html/&lt;br /&gt;
Hier das angepasste Script:&lt;br /&gt;
&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} (^.htm$|^.html$)&lt;br /&gt;
RewriteRule (.*[^/])$ %{HTTP_HOST}/$1/ [L,R]&lt;br /&gt;
Heißt: Wenn die URL mit .htm oder .html endet, dann soll der zusätzliche Slash NICHT hinten dran gemacht werden.&lt;br /&gt;
&lt;br /&gt;
Index-Dateien in Ordnern&lt;br /&gt;
Je nach Projekt und Ordner kann es vorkommen, dass Du trotz RealUrl die Index-Dateien in bestimmten Ordnern ausführen möchtest:&lt;br /&gt;
&lt;br /&gt;
/fileadmin/projekt/download/index.php&lt;br /&gt;
Allerdings wird derzeit noch diese URL an die TYPO3-eigene index.php im Rootverzeichnis weitergeleitet. Um auch das zu unterbinden sind folgende 6 Zeilen vorgesehen:&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME}/index.html -f&lt;br /&gt;
RewriteRule / %{REQUEST_URI}/index.html [L]&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME}/index.htm -f&lt;br /&gt;
RewriteRule / %{REQUEST_URI}/index.htm [L]&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME}/index.php -f&lt;br /&gt;
RewriteRule / %{REQUEST_URI}/index.php [L]&lt;br /&gt;
URL-Modifikation für RealUrl&lt;br /&gt;
Dieses Script ist das wichtigste Script überhaupt für RealUrl. Hier wird nun endlich gesagt, dass alle Teile aus der URL an die TYPO3-eigene index.php weitergeleitet werden sollen zur Weiterverarbeitung durch RealUrl.&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-d&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
RewriteRule .* index.php&lt;br /&gt;
Hinweis&lt;br /&gt;
Je nach Art Eurer TYPO3-Installation könnte es sein, dass Eure index.php ein symbolischer Link ist. In diesem Fall müsst Ihr die letzt Zeile folgendermaßen ändern:&lt;br /&gt;
&lt;br /&gt;
RewriteRule .* /index.php&lt;br /&gt;
Scripmerger&lt;br /&gt;
Dieses Script benötigt Ihr nur, wenn Ihr die Extension scriptmerger verwenden wollt:&lt;br /&gt;
# Expires Header + Removal of ETag&lt;br /&gt;
&amp;lt;FilesMatch &amp;quot;\.(ico|png|gif|js|css|jpg|jpeg|swf)&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;IfModule mod_expires.c&amp;gt;&lt;br /&gt;
        ExpiresActive on&lt;br /&gt;
        ExpiresDefault &amp;quot;access plus 7 days&amp;quot;&lt;br /&gt;
        ExpiresDefault &amp;quot;access plus 2 months&amp;quot;&lt;br /&gt;
    &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# ETag&lt;br /&gt;
  FileETag MTime Size&lt;br /&gt;
  &amp;lt;IfModule mod_headers.c&amp;gt;&lt;br /&gt;
      FileETag none&lt;br /&gt;
      Header unset Last-Modified&lt;br /&gt;
    &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Compressed Content&lt;br /&gt;
&amp;lt;FilesMatch &amp;quot;\.gz\.(js|css)&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;IfModule mod_headers.c&amp;gt;&lt;br /&gt;
        Header set Content-Encoding gzip&lt;br /&gt;
    &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Shell Restriction auf all-inkl Server ===&lt;br /&gt;
Ab TYPO3 6 moniert das Install Tool das exec nicht augeführt werden darf. Es funktioniert wenn man die cgi Version von PHP nimmt. Das kann man per htaccess oder im KAS Backend einstellen.&lt;br /&gt;
&lt;br /&gt;
Beispiele.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AddHandler php55-cgi .php (sofern vom Server unterstützt)&lt;br /&gt;
AddHandler php54-cgi .php (sofern vom Server unterstützt)&lt;br /&gt;
AddHandler php53-cgi .php&lt;br /&gt;
AddHandler php52-cgi .php&lt;br /&gt;
AddHandler php5-cgi .php (Version entsprechend der PHP Apache-Modul Version)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHP Version auf Weiland Servern ===&lt;br /&gt;
 Über die PHP-Versionsauswahl im Kundenmenü können Sie die PHP-Version für eine Domain ändern. Folgende Anleitung erklärt, wie Sie die PHP Version für einzelne Verzeichnisse (und deren Unterverzeichnisse) ändern können.&lt;br /&gt;
&lt;br /&gt;
Das Verzeichnis kann dabei nur eine höhere PHP-Version erhalten, als die PHP-Version, die für die Domain im Kundenmenü eingestellt ist.&lt;br /&gt;
&lt;br /&gt;
Das bedeutet: Ist für die Domain PHP 5.6 im Kundenmenü eingestellt, können Sie für einzelne Verzeichnisse PHP 7.0 und höher einstellen, nicht jedoch niedrigere Versionen wie PHP 5.5. *&lt;br /&gt;
&lt;br /&gt;
Außerdem darf für die Domain kein Fast-CGI aktiviert sein.&lt;br /&gt;
&lt;br /&gt;
Um die PHP-Version für ein Verzeichnis zu ändern, legen Sie eine .htaccess-Datei mit folgender Anweisung in dem Verzeichnis ab. Die Anweisung ist abhängig von der PHP-Version, die Sie aktivieren möchten: &lt;br /&gt;
 AddType application/x-httpd-php72 .php&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Terminal_und_Konsole_auf_dem_Mac&amp;diff=25397</id>
		<title>Terminal und Konsole auf dem Mac</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Terminal_und_Konsole_auf_dem_Mac&amp;diff=25397"/>
		<updated>2021-09-01T07:36:02Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: /* Dateien kopieren, bewegen, umbenennen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tips für die Arbeit mit dem Terminal&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Das Erscheinungsbild des Terminals kann man einfach Verbessern. Dazu kann man z.B. im Home-Directory die Dateien &amp;#039;&amp;#039;&amp;#039;.bash_profile&amp;#039;&amp;#039;&amp;#039; or &amp;#039;&amp;#039;&amp;#039;.bashrc&amp;#039;&amp;#039;&amp;#039; anpassen. Aber auch die &amp;#039;&amp;#039;&amp;#039;.profile&amp;#039;&amp;#039;&amp;#039; Datei Funktioniert. Je nachdem ob man die User Dateien oder die Globalen nimmt wird die Änderung global oder auf User-Ebene umgesetzt. Wenn die Dateien nicht vorhanden sind einfach hinzufügen.&lt;br /&gt;
&lt;br /&gt;
== Prompt anpassen ==&lt;br /&gt;
Wie oben beschrieben z.B. in die .bash_profile datei&lt;br /&gt;
&amp;#039;&amp;#039;Farbiges&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;Prompt&amp;#039;&amp;#039;&amp;#039; und Anzeige als: &amp;#039;&amp;#039;“username@hostname:cwd $”&amp;#039;&amp;#039;&lt;br /&gt;
 export PS1=&amp;quot;\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ &amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Farben auf Mac Terminal ==&lt;br /&gt;
 export CLICOLOR=1&lt;br /&gt;
 export LSCOLORS=GxFxCxDxBxegedabagaced&lt;br /&gt;
&lt;br /&gt;
CLICOLOR=1 bedeutet Farbe anschalten&lt;br /&gt;
LSCOLORS= Farben für die anzeige im Listkommando&lt;br /&gt;
== Mac UNIX ==&lt;br /&gt;
Basiert auf UNIX&lt;br /&gt;
&lt;br /&gt;
Apfel &amp;gt; Über diesen Mac &amp;gt; Software (da steht z.B. die kernel Version)&lt;br /&gt;
&lt;br /&gt;
== Umgebungsvariablen, PATH Variable etc.== &lt;br /&gt;
siehe auch: http://wiki.zone30.info/wikizone/index.php/Linux_-_Umgebungsvariable&lt;br /&gt;
&lt;br /&gt;
alle kriegt man mit&lt;br /&gt;
 set | less&lt;br /&gt;
eine einzelne z.B. mit:&lt;br /&gt;
echo $PATH &lt;br /&gt;
&lt;br /&gt;
==== PATH Variable anpassen ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hinzufügen&amp;#039;&amp;#039;&amp;#039; eines Pfades für eine &amp;#039;&amp;#039;&amp;#039;einzelne&amp;#039;&amp;#039;&amp;#039; Terminal &amp;#039;&amp;#039;&amp;#039;Session&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
 PATH=MeinZusatzPfad:$PATH&lt;br /&gt;
 export PATH&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exportieren&amp;#039;&amp;#039;&amp;#039; ist wichtig wenn die neue Variable auch in &amp;#039;&amp;#039;&amp;#039;Unterterminals&amp;#039;&amp;#039;&amp;#039; zur Verfügung stehen soll (z.B. bei Bash Skripten)&lt;br /&gt;
&lt;br /&gt;
=== Dauerhaft PATH Variable in der Bash setzen ===&lt;br /&gt;
Auf diese Weise stehen die PATH Variable &amp;#039;&amp;#039;&amp;#039;bei jeder Sitzung&amp;#039;&amp;#039;&amp;#039; zur Verfügung. Mac speichert die Bash Datei im Userverzeichnis. &lt;br /&gt;
&lt;br /&gt;
Wir öffnen die bash_profile Datei im Standard Editor (wenn Sie nicht vorhanden ist wird Sie erzeugt).&lt;br /&gt;
 touch ~/.bash_profile; open ~/.bash_profile&lt;br /&gt;
Jetzt können wir die Variable setzen. Hier ein Beispiel mit der Android ADT&lt;br /&gt;
 export PATH=/Users/schlegel/Development/adt-bundle-mac-x86_64/sdk/platform-tools:/Users/schlegel/Development/adt-bundle-mac-x86_64/sdk/tools:$PATH&lt;br /&gt;
&lt;br /&gt;
Durch das :$PATH am Ende wird der neue Wert zu den Standardwerten hinzugefügt oder hier besser vorangestellt)&lt;br /&gt;
&lt;br /&gt;
Jetzt noch die Datei abspeichern und ausführen:&lt;br /&gt;
&lt;br /&gt;
 source ~/.bash_profile&lt;br /&gt;
== Umfangreiches .bash_profile Beispiel ==&lt;br /&gt;
Quelle: http://natelandau.com/my-mac-osx-bash_profile/ (2015-10)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#  ---------------------------------------------------------------------------&lt;br /&gt;
#&lt;br /&gt;
#  Description:  This file holds all my BASH configurations and aliases&lt;br /&gt;
#&lt;br /&gt;
#  Sections:&lt;br /&gt;
#  1.   Environment Configuration&lt;br /&gt;
#  2.   Make Terminal Better (remapping defaults and adding functionality)&lt;br /&gt;
#  3.   File and Folder Management&lt;br /&gt;
#  4.   Searching&lt;br /&gt;
#  5.   Process Management&lt;br /&gt;
#  6.   Networking&lt;br /&gt;
#  7.   System Operations &amp;amp; Information&lt;br /&gt;
#  8.   Web Development&lt;br /&gt;
#  9.   Reminders &amp;amp; Notes&lt;br /&gt;
#&lt;br /&gt;
#  ---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
#   1.  ENVIRONMENT CONFIGURATION&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
&lt;br /&gt;
#   Change Prompt&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export PS1=&amp;quot;________________________________________________________________________________\n| \w @ \h (\u) \n| =&amp;gt; &amp;quot;&lt;br /&gt;
    export PS2=&amp;quot;| =&amp;gt; &amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   Set Paths&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export PATH=&amp;quot;$PATH:/usr/local/bin/&amp;quot;&lt;br /&gt;
    export PATH=&amp;quot;/usr/local/git/bin:/sw/bin/:/usr/local/bin:/usr/local/:/usr/local/sbin:/usr/local/mysql/bin:$PATH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   Set Default Editor (change &amp;#039;Nano&amp;#039; to the editor of your choice)&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export EDITOR=/usr/bin/nano&lt;br /&gt;
&lt;br /&gt;
#   Set default blocksize for ls, df, du&lt;br /&gt;
#   from this: http://hints.macworld.com/comment.php?mode=view&amp;amp;cid=24491&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export BLOCKSIZE=1k&lt;br /&gt;
&lt;br /&gt;
#   Add color to terminal&lt;br /&gt;
#   (this is all commented out as I use Mac Terminal Profiles)&lt;br /&gt;
#   from http://osxdaily.com/2012/02/21/add-color-to-the-terminal-in-mac-os-x/&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
#   export CLICOLOR=1&lt;br /&gt;
#   export LSCOLORS=ExFxBxDxCxegedabagacad&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   -----------------------------&lt;br /&gt;
#   2.  MAKE TERMINAL BETTER&lt;br /&gt;
#   -----------------------------&lt;br /&gt;
&lt;br /&gt;
alias cp=&amp;#039;cp -iv&amp;#039;                           # Preferred &amp;#039;cp&amp;#039; implementation&lt;br /&gt;
alias mv=&amp;#039;mv -iv&amp;#039;                           # Preferred &amp;#039;mv&amp;#039; implementation&lt;br /&gt;
alias mkdir=&amp;#039;mkdir -pv&amp;#039;                     # Preferred &amp;#039;mkdir&amp;#039; implementation&lt;br /&gt;
alias ll=&amp;#039;ls -FGlAhp&amp;#039;                       # Preferred &amp;#039;ls&amp;#039; implementation&lt;br /&gt;
alias less=&amp;#039;less -FSRXc&amp;#039;                    # Preferred &amp;#039;less&amp;#039; implementation&lt;br /&gt;
cd() { builtin cd &amp;quot;$@&amp;quot;; ll; }               # Always list directory contents upon &amp;#039;cd&amp;#039;&lt;br /&gt;
alias cd..=&amp;#039;cd ../&amp;#039;                         # Go back 1 directory level (for fast typers)&lt;br /&gt;
alias ..=&amp;#039;cd ../&amp;#039;                           # Go back 1 directory level&lt;br /&gt;
alias ...=&amp;#039;cd ../../&amp;#039;                       # Go back 2 directory levels&lt;br /&gt;
alias .3=&amp;#039;cd ../../../&amp;#039;                     # Go back 3 directory levels&lt;br /&gt;
alias .4=&amp;#039;cd ../../../../&amp;#039;                  # Go back 4 directory levels&lt;br /&gt;
alias .5=&amp;#039;cd ../../../../../&amp;#039;               # Go back 5 directory levels&lt;br /&gt;
alias .6=&amp;#039;cd ../../../../../../&amp;#039;            # Go back 6 directory levels&lt;br /&gt;
alias edit=&amp;#039;subl&amp;#039;                           # edit:         Opens any file in sublime editor&lt;br /&gt;
alias f=&amp;#039;open -a Finder ./&amp;#039;                 # f:            Opens current directory in MacOS Finder&lt;br /&gt;
alias ~=&amp;quot;cd ~&amp;quot;                              # ~:            Go Home&lt;br /&gt;
alias c=&amp;#039;clear&amp;#039;                             # c:            Clear terminal display&lt;br /&gt;
alias which=&amp;#039;type -all&amp;#039;                     # which:        Find executables&lt;br /&gt;
alias path=&amp;#039;echo -e ${PATH//:/\\n}&amp;#039;         # path:         Echo all executable Paths&lt;br /&gt;
alias show_options=&amp;#039;shopt&amp;#039;                  # Show_options: display bash options settings&lt;br /&gt;
alias fix_stty=&amp;#039;stty sane&amp;#039;                  # fix_stty:     Restore terminal settings when screwed up&lt;br /&gt;
alias cic=&amp;#039;set completion-ignore-case On&amp;#039;   # cic:          Make tab-completion case-insensitive&lt;br /&gt;
mcd () { mkdir -p &amp;quot;$1&amp;quot; &amp;amp;&amp;amp; cd &amp;quot;$1&amp;quot;; }        # mcd:          Makes new Dir and jumps inside&lt;br /&gt;
trash () { command mv &amp;quot;$@&amp;quot; ~/.Trash ; }     # trash:        Moves a file to the MacOS trash&lt;br /&gt;
ql () { qlmanage -p &amp;quot;$*&amp;quot; &amp;gt;&amp;amp; /dev/null; }    # ql:           Opens any file in MacOS Quicklook Preview&lt;br /&gt;
alias DT=&amp;#039;tee ~/Desktop/terminalOut.txt&amp;#039;    # DT:           Pipe content to file on MacOS Desktop&lt;br /&gt;
&lt;br /&gt;
#   lr:  Full Recursive Directory Listing&lt;br /&gt;
#   ------------------------------------------&lt;br /&gt;
alias lr=&amp;#039;ls -R | grep &amp;quot;:$&amp;quot; | sed -e &amp;#039;\&amp;#039;&amp;#039;s/:$//&amp;#039;\&amp;#039;&amp;#039; -e &amp;#039;\&amp;#039;&amp;#039;s/[^-][^\/]*\//--/g&amp;#039;\&amp;#039;&amp;#039; -e &amp;#039;\&amp;#039;&amp;#039;s/^/   /&amp;#039;\&amp;#039;&amp;#039; -e &amp;#039;\&amp;#039;&amp;#039;s/-/|/&amp;#039;\&amp;#039;&amp;#039; | less&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   mans:   Search manpage given in agument &amp;#039;1&amp;#039; for term given in argument &amp;#039;2&amp;#039; (case insensitive)&lt;br /&gt;
#           displays paginated result with colored search terms and two lines surrounding each hit.             Example: mans mplayer codec&lt;br /&gt;
#   --------------------------------------------------------------------&lt;br /&gt;
    mans () {&lt;br /&gt;
        man $1 | grep -iC2 --color=always $2 | less&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
#   showa: to remind yourself of an alias (given some part of it)&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    showa () { /usr/bin/grep --color=always -i -a1 $@ ~/Library/init/bash/aliases.bash | grep -v &amp;#039;^\s*$&amp;#039; | less -FSRXc ; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
#   3.  FILE AND FOLDER MANAGEMENT&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
&lt;br /&gt;
zipf () { zip -r &amp;quot;$1&amp;quot;.zip &amp;quot;$1&amp;quot; ; }          # zipf:         To create a ZIP archive of a folder&lt;br /&gt;
alias numFiles=&amp;#039;echo $(ls -1 | wc -l)&amp;#039;      # numFiles:     Count of non-hidden files in current dir&lt;br /&gt;
alias make1mb=&amp;#039;mkfile 1m ./1MB.dat&amp;#039;         # make1mb:      Creates a file of 1mb size (all zeros)&lt;br /&gt;
alias make5mb=&amp;#039;mkfile 5m ./5MB.dat&amp;#039;         # make5mb:      Creates a file of 5mb size (all zeros)&lt;br /&gt;
alias make10mb=&amp;#039;mkfile 10m ./10MB.dat&amp;#039;      # make10mb:     Creates a file of 10mb size (all zeros)&lt;br /&gt;
&lt;br /&gt;
#   cdf:  &amp;#039;Cd&amp;#039;s to frontmost window of MacOS Finder&lt;br /&gt;
#   ------------------------------------------------------&lt;br /&gt;
    cdf () {&lt;br /&gt;
        currFolderPath=$( /usr/bin/osascript &amp;lt;&amp;lt;EOT&lt;br /&gt;
            tell application &amp;quot;Finder&amp;quot;&lt;br /&gt;
                try&lt;br /&gt;
            set currFolder to (folder of the front window as alias)&lt;br /&gt;
                on error&lt;br /&gt;
            set currFolder to (path to desktop folder as alias)&lt;br /&gt;
                end try&lt;br /&gt;
                POSIX path of currFolder&lt;br /&gt;
            end tell&lt;br /&gt;
EOT&lt;br /&gt;
        )&lt;br /&gt;
        echo &amp;quot;cd to \&amp;quot;$currFolderPath\&amp;quot;&amp;quot;&lt;br /&gt;
        cd &amp;quot;$currFolderPath&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
#   extract:  Extract most know archives with one command&lt;br /&gt;
#   ---------------------------------------------------------&lt;br /&gt;
    extract () {&lt;br /&gt;
        if [ -f $1 ] ; then&lt;br /&gt;
          case $1 in&lt;br /&gt;
            *.tar.bz2)   tar xjf $1     ;;&lt;br /&gt;
            *.tar.gz)    tar xzf $1     ;;&lt;br /&gt;
            *.bz2)       bunzip2 $1     ;;&lt;br /&gt;
            *.rar)       unrar e $1     ;;&lt;br /&gt;
            *.gz)        gunzip $1      ;;&lt;br /&gt;
            *.tar)       tar xf $1      ;;&lt;br /&gt;
            *.tbz2)      tar xjf $1     ;;&lt;br /&gt;
            *.tgz)       tar xzf $1     ;;&lt;br /&gt;
            *.zip)       unzip $1       ;;&lt;br /&gt;
            *.Z)         uncompress $1  ;;&lt;br /&gt;
            *.7z)        7z x $1        ;;&lt;br /&gt;
            *)     echo &amp;quot;&amp;#039;$1&amp;#039; cannot be extracted via extract()&amp;quot; ;;&lt;br /&gt;
             esac&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;&amp;#039;$1&amp;#039; is not a valid file&amp;quot;&lt;br /&gt;
         fi&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
#   4.  SEARCHING&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
&lt;br /&gt;
alias qfind=&amp;quot;find . -name &amp;quot;                 # qfind:    Quickly search for file&lt;br /&gt;
ff () { /usr/bin/find . -name &amp;quot;$@&amp;quot; ; }      # ff:       Find file under the current directory&lt;br /&gt;
ffs () { /usr/bin/find . -name &amp;quot;$@&amp;quot;&amp;#039;*&amp;#039; ; }  # ffs:      Find file whose name starts with a given string&lt;br /&gt;
ffe () { /usr/bin/find . -name &amp;#039;*&amp;#039;&amp;quot;$@&amp;quot; ; }  # ffe:      Find file whose name ends with a given string&lt;br /&gt;
&lt;br /&gt;
#   spotlight: Search for a file using MacOS Spotlight&amp;#039;s metadata&lt;br /&gt;
#   -----------------------------------------------------------&lt;br /&gt;
    spotlight () { mdfind &amp;quot;kMDItemDisplayName == &amp;#039;$@&amp;#039;wc&amp;quot;; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
#   5.  PROCESS MANAGEMENT&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
&lt;br /&gt;
#   findPid: find out the pid of a specified process&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
#       Note that the command name can be specified via a regex&lt;br /&gt;
#       E.g. findPid &amp;#039;/d$/&amp;#039; finds pids of all processes with names ending in &amp;#039;d&amp;#039;&lt;br /&gt;
#       Without the &amp;#039;sudo&amp;#039; it will only find processes of the current user&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    findPid () { lsof -t -c &amp;quot;$@&amp;quot; ; }&lt;br /&gt;
&lt;br /&gt;
#   memHogsTop, memHogsPs:  Find memory hogs&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    alias memHogsTop=&amp;#039;top -l 1 -o rsize | head -20&amp;#039;&lt;br /&gt;
    alias memHogsPs=&amp;#039;ps wwaxm -o pid,stat,vsize,rss,time,command | head -10&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   cpuHogs:  Find CPU hogs&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    alias cpu_hogs=&amp;#039;ps wwaxr -o pid,stat,%cpu,time,command | head -10&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   topForever:  Continual &amp;#039;top&amp;#039; listing (every 10 seconds)&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    alias topForever=&amp;#039;top -l 9999999 -s 10 -o cpu&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   ttop:  Recommended &amp;#039;top&amp;#039; invocation to minimize resources&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
#       Taken from this macosxhints article&lt;br /&gt;
#       http://www.macosxhints.com/article.php?story=20060816123853639&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    alias ttop=&amp;quot;top -R -F -s 10 -o rsize&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   my_ps: List processes owned by my user:&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    my_ps() { ps $@ -u $USER -o pid,%cpu,%mem,start,time,bsdtime,command ; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
#   6.  NETWORKING&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
&lt;br /&gt;
alias myip=&amp;#039;curl ip.appspot.com&amp;#039;                    # myip:         Public facing IP Address&lt;br /&gt;
alias netCons=&amp;#039;lsof -i&amp;#039;                             # netCons:      Show all open TCP/IP sockets&lt;br /&gt;
alias flushDNS=&amp;#039;dscacheutil -flushcache&amp;#039;            # flushDNS:     Flush out the DNS Cache&lt;br /&gt;
alias lsock=&amp;#039;sudo /usr/sbin/lsof -i -P&amp;#039;             # lsock:        Display open sockets&lt;br /&gt;
alias lsockU=&amp;#039;sudo /usr/sbin/lsof -nP | grep UDP&amp;#039;   # lsockU:       Display only open UDP sockets&lt;br /&gt;
alias lsockT=&amp;#039;sudo /usr/sbin/lsof -nP | grep TCP&amp;#039;   # lsockT:       Display only open TCP sockets&lt;br /&gt;
alias ipInfo0=&amp;#039;ipconfig getpacket en0&amp;#039;              # ipInfo0:      Get info on connections for en0&lt;br /&gt;
alias ipInfo1=&amp;#039;ipconfig getpacket en1&amp;#039;              # ipInfo1:      Get info on connections for en1&lt;br /&gt;
alias openPorts=&amp;#039;sudo lsof -i | grep LISTEN&amp;#039;        # openPorts:    All listening connections&lt;br /&gt;
alias showBlocked=&amp;#039;sudo ipfw list&amp;#039;                  # showBlocked:  All ipfw rules inc/ blocked IPs&lt;br /&gt;
&lt;br /&gt;
#   ii:  display useful host related informaton&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    ii() {&lt;br /&gt;
        echo -e &amp;quot;\nYou are logged on ${RED}$HOST&amp;quot;&lt;br /&gt;
        echo -e &amp;quot;\nAdditionnal information:$NC &amp;quot; ; uname -a&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Users logged on:$NC &amp;quot; ; w -h&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Current date :$NC &amp;quot; ; date&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Machine stats :$NC &amp;quot; ; uptime&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Current network location :$NC &amp;quot; ; scselect&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Public facing IP Address :$NC &amp;quot; ;myip&lt;br /&gt;
        #echo -e &amp;quot;\n${RED}DNS Configuration:$NC &amp;quot; ; scutil --dns&lt;br /&gt;
        echo&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   7.  SYSTEMS OPERATIONS &amp;amp; INFORMATION&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
&lt;br /&gt;
alias mountReadWrite=&amp;#039;/sbin/mount -uw /&amp;#039;    # mountReadWrite:   For use when booted into single-user&lt;br /&gt;
&lt;br /&gt;
#   cleanupDS:  Recursively delete .DS_Store files&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    alias cleanupDS=&amp;quot;find . -type f -name &amp;#039;*.DS_Store&amp;#039; -ls -delete&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   finderShowHidden:   Show hidden files in Finder&lt;br /&gt;
#   finderHideHidden:   Hide hidden files in Finder&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    alias finderShowHidden=&amp;#039;defaults write com.apple.finder ShowAllFiles TRUE&amp;#039;&lt;br /&gt;
    alias finderHideHidden=&amp;#039;defaults write com.apple.finder ShowAllFiles FALSE&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   cleanupLS:  Clean up LaunchServices to remove duplicates in the &amp;quot;Open With&amp;quot; menu&lt;br /&gt;
#   -----------------------------------------------------------------------------------&lt;br /&gt;
    alias cleanupLS=&amp;quot;/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user &amp;amp;&amp;amp; killall Finder&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#    screensaverDesktop: Run a screensaver on the Desktop&lt;br /&gt;
#   -----------------------------------------------------------------------------------&lt;br /&gt;
    alias screensaverDesktop=&amp;#039;/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   8.  WEB DEVELOPMENT&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
&lt;br /&gt;
alias apacheEdit=&amp;#039;sudo edit /etc/httpd/httpd.conf&amp;#039;      # apacheEdit:       Edit httpd.conf&lt;br /&gt;
alias apacheRestart=&amp;#039;sudo apachectl graceful&amp;#039;           # apacheRestart:    Restart Apache&lt;br /&gt;
alias editHosts=&amp;#039;sudo edit /etc/hosts&amp;#039;                  # editHosts:        Edit /etc/hosts file&lt;br /&gt;
alias herr=&amp;#039;tail /var/log/httpd/error_log&amp;#039;              # herr:             Tails HTTP error logs&lt;br /&gt;
alias apacheLogs=&amp;quot;less +F /var/log/apache2/error_log&amp;quot;   # Apachelogs:   Shows apache error logs&lt;br /&gt;
httpHeaders () { /usr/bin/curl -I -L $@ ; }             # httpHeaders:      Grabs headers from web page&lt;br /&gt;
&lt;br /&gt;
#   httpDebug:  Download a web page and show info on what took time&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    httpDebug () { /usr/bin/curl $@ -o /dev/null -w &amp;quot;dns: %{time_namelookup} connect: %{time_connect} pretransfer: %{time_pretransfer} starttransfer: %{time_starttransfer} total: %{time_total}\n&amp;quot; ; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   9.  REMINDERS &amp;amp; NOTES&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
&lt;br /&gt;
#   remove_disk: spin down unneeded disk&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   diskutil eject /dev/disk1s3&lt;br /&gt;
&lt;br /&gt;
#   to change the password on an encrypted disk image:&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   hdiutil chpass /path/to/the/diskimage&lt;br /&gt;
&lt;br /&gt;
#   to mount a read-only disk image as read-write:&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   hdiutil attach example.dmg -shadow /tmp/example.shadow -noverify&lt;br /&gt;
&lt;br /&gt;
#   mounting a removable drive (of type msdos or hfs)&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   mkdir /Volumes/Foo&lt;br /&gt;
#   ls /dev/disk*   to find out the device to use in the mount command)&lt;br /&gt;
#   mount -t msdos /dev/disk1s1 /Volumes/Foo&lt;br /&gt;
#   mount -t hfs /dev/disk1s1 /Volumes/Foo&lt;br /&gt;
&lt;br /&gt;
#   to create a file of a given size: /usr/sbin/mkfile or /usr/bin/hdiutil&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   e.g.: mkfile 10m 10MB.dat&lt;br /&gt;
#   e.g.: hdiutil create -size 10m 10MB.dmg&lt;br /&gt;
#   the above create files that are almost all zeros - if random bytes are desired&lt;br /&gt;
#   then use: ~/Dev/Perl/randBytes 1048576 &amp;gt; 10MB.dat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipps und Tricks ==&lt;br /&gt;
=== Mit Terminal auf externe Festplatte zugreifen ===&lt;br /&gt;
 /Volumes&lt;br /&gt;
=== Dateien kopieren, bewegen, umbenennen ===&lt;br /&gt;
 https://www.macworld.com/article/222558/macos-command-line-copying-moving-files-terminal.html&lt;br /&gt;
&lt;br /&gt;
 cp source.txt target.txt&lt;br /&gt;
 cp -R sourceFolder/ /Volumes/backupDrive/myBackupFolder&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Terminal_und_Konsole_auf_dem_Mac&amp;diff=25396</id>
		<title>Terminal und Konsole auf dem Mac</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Terminal_und_Konsole_auf_dem_Mac&amp;diff=25396"/>
		<updated>2021-09-01T07:30:02Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tips für die Arbeit mit dem Terminal&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
Das Erscheinungsbild des Terminals kann man einfach Verbessern. Dazu kann man z.B. im Home-Directory die Dateien &amp;#039;&amp;#039;&amp;#039;.bash_profile&amp;#039;&amp;#039;&amp;#039; or &amp;#039;&amp;#039;&amp;#039;.bashrc&amp;#039;&amp;#039;&amp;#039; anpassen. Aber auch die &amp;#039;&amp;#039;&amp;#039;.profile&amp;#039;&amp;#039;&amp;#039; Datei Funktioniert. Je nachdem ob man die User Dateien oder die Globalen nimmt wird die Änderung global oder auf User-Ebene umgesetzt. Wenn die Dateien nicht vorhanden sind einfach hinzufügen.&lt;br /&gt;
&lt;br /&gt;
== Prompt anpassen ==&lt;br /&gt;
Wie oben beschrieben z.B. in die .bash_profile datei&lt;br /&gt;
&amp;#039;&amp;#039;Farbiges&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;Prompt&amp;#039;&amp;#039;&amp;#039; und Anzeige als: &amp;#039;&amp;#039;“username@hostname:cwd $”&amp;#039;&amp;#039;&lt;br /&gt;
 export PS1=&amp;quot;\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ &amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Farben auf Mac Terminal ==&lt;br /&gt;
 export CLICOLOR=1&lt;br /&gt;
 export LSCOLORS=GxFxCxDxBxegedabagaced&lt;br /&gt;
&lt;br /&gt;
CLICOLOR=1 bedeutet Farbe anschalten&lt;br /&gt;
LSCOLORS= Farben für die anzeige im Listkommando&lt;br /&gt;
== Mac UNIX ==&lt;br /&gt;
Basiert auf UNIX&lt;br /&gt;
&lt;br /&gt;
Apfel &amp;gt; Über diesen Mac &amp;gt; Software (da steht z.B. die kernel Version)&lt;br /&gt;
&lt;br /&gt;
== Umgebungsvariablen, PATH Variable etc.== &lt;br /&gt;
siehe auch: http://wiki.zone30.info/wikizone/index.php/Linux_-_Umgebungsvariable&lt;br /&gt;
&lt;br /&gt;
alle kriegt man mit&lt;br /&gt;
 set | less&lt;br /&gt;
eine einzelne z.B. mit:&lt;br /&gt;
echo $PATH &lt;br /&gt;
&lt;br /&gt;
==== PATH Variable anpassen ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hinzufügen&amp;#039;&amp;#039;&amp;#039; eines Pfades für eine &amp;#039;&amp;#039;&amp;#039;einzelne&amp;#039;&amp;#039;&amp;#039; Terminal &amp;#039;&amp;#039;&amp;#039;Session&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
 PATH=MeinZusatzPfad:$PATH&lt;br /&gt;
 export PATH&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exportieren&amp;#039;&amp;#039;&amp;#039; ist wichtig wenn die neue Variable auch in &amp;#039;&amp;#039;&amp;#039;Unterterminals&amp;#039;&amp;#039;&amp;#039; zur Verfügung stehen soll (z.B. bei Bash Skripten)&lt;br /&gt;
&lt;br /&gt;
=== Dauerhaft PATH Variable in der Bash setzen ===&lt;br /&gt;
Auf diese Weise stehen die PATH Variable &amp;#039;&amp;#039;&amp;#039;bei jeder Sitzung&amp;#039;&amp;#039;&amp;#039; zur Verfügung. Mac speichert die Bash Datei im Userverzeichnis. &lt;br /&gt;
&lt;br /&gt;
Wir öffnen die bash_profile Datei im Standard Editor (wenn Sie nicht vorhanden ist wird Sie erzeugt).&lt;br /&gt;
 touch ~/.bash_profile; open ~/.bash_profile&lt;br /&gt;
Jetzt können wir die Variable setzen. Hier ein Beispiel mit der Android ADT&lt;br /&gt;
 export PATH=/Users/schlegel/Development/adt-bundle-mac-x86_64/sdk/platform-tools:/Users/schlegel/Development/adt-bundle-mac-x86_64/sdk/tools:$PATH&lt;br /&gt;
&lt;br /&gt;
Durch das :$PATH am Ende wird der neue Wert zu den Standardwerten hinzugefügt oder hier besser vorangestellt)&lt;br /&gt;
&lt;br /&gt;
Jetzt noch die Datei abspeichern und ausführen:&lt;br /&gt;
&lt;br /&gt;
 source ~/.bash_profile&lt;br /&gt;
== Umfangreiches .bash_profile Beispiel ==&lt;br /&gt;
Quelle: http://natelandau.com/my-mac-osx-bash_profile/ (2015-10)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#  ---------------------------------------------------------------------------&lt;br /&gt;
#&lt;br /&gt;
#  Description:  This file holds all my BASH configurations and aliases&lt;br /&gt;
#&lt;br /&gt;
#  Sections:&lt;br /&gt;
#  1.   Environment Configuration&lt;br /&gt;
#  2.   Make Terminal Better (remapping defaults and adding functionality)&lt;br /&gt;
#  3.   File and Folder Management&lt;br /&gt;
#  4.   Searching&lt;br /&gt;
#  5.   Process Management&lt;br /&gt;
#  6.   Networking&lt;br /&gt;
#  7.   System Operations &amp;amp; Information&lt;br /&gt;
#  8.   Web Development&lt;br /&gt;
#  9.   Reminders &amp;amp; Notes&lt;br /&gt;
#&lt;br /&gt;
#  ---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
#   1.  ENVIRONMENT CONFIGURATION&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
&lt;br /&gt;
#   Change Prompt&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export PS1=&amp;quot;________________________________________________________________________________\n| \w @ \h (\u) \n| =&amp;gt; &amp;quot;&lt;br /&gt;
    export PS2=&amp;quot;| =&amp;gt; &amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   Set Paths&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export PATH=&amp;quot;$PATH:/usr/local/bin/&amp;quot;&lt;br /&gt;
    export PATH=&amp;quot;/usr/local/git/bin:/sw/bin/:/usr/local/bin:/usr/local/:/usr/local/sbin:/usr/local/mysql/bin:$PATH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   Set Default Editor (change &amp;#039;Nano&amp;#039; to the editor of your choice)&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export EDITOR=/usr/bin/nano&lt;br /&gt;
&lt;br /&gt;
#   Set default blocksize for ls, df, du&lt;br /&gt;
#   from this: http://hints.macworld.com/comment.php?mode=view&amp;amp;cid=24491&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    export BLOCKSIZE=1k&lt;br /&gt;
&lt;br /&gt;
#   Add color to terminal&lt;br /&gt;
#   (this is all commented out as I use Mac Terminal Profiles)&lt;br /&gt;
#   from http://osxdaily.com/2012/02/21/add-color-to-the-terminal-in-mac-os-x/&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
#   export CLICOLOR=1&lt;br /&gt;
#   export LSCOLORS=ExFxBxDxCxegedabagacad&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   -----------------------------&lt;br /&gt;
#   2.  MAKE TERMINAL BETTER&lt;br /&gt;
#   -----------------------------&lt;br /&gt;
&lt;br /&gt;
alias cp=&amp;#039;cp -iv&amp;#039;                           # Preferred &amp;#039;cp&amp;#039; implementation&lt;br /&gt;
alias mv=&amp;#039;mv -iv&amp;#039;                           # Preferred &amp;#039;mv&amp;#039; implementation&lt;br /&gt;
alias mkdir=&amp;#039;mkdir -pv&amp;#039;                     # Preferred &amp;#039;mkdir&amp;#039; implementation&lt;br /&gt;
alias ll=&amp;#039;ls -FGlAhp&amp;#039;                       # Preferred &amp;#039;ls&amp;#039; implementation&lt;br /&gt;
alias less=&amp;#039;less -FSRXc&amp;#039;                    # Preferred &amp;#039;less&amp;#039; implementation&lt;br /&gt;
cd() { builtin cd &amp;quot;$@&amp;quot;; ll; }               # Always list directory contents upon &amp;#039;cd&amp;#039;&lt;br /&gt;
alias cd..=&amp;#039;cd ../&amp;#039;                         # Go back 1 directory level (for fast typers)&lt;br /&gt;
alias ..=&amp;#039;cd ../&amp;#039;                           # Go back 1 directory level&lt;br /&gt;
alias ...=&amp;#039;cd ../../&amp;#039;                       # Go back 2 directory levels&lt;br /&gt;
alias .3=&amp;#039;cd ../../../&amp;#039;                     # Go back 3 directory levels&lt;br /&gt;
alias .4=&amp;#039;cd ../../../../&amp;#039;                  # Go back 4 directory levels&lt;br /&gt;
alias .5=&amp;#039;cd ../../../../../&amp;#039;               # Go back 5 directory levels&lt;br /&gt;
alias .6=&amp;#039;cd ../../../../../../&amp;#039;            # Go back 6 directory levels&lt;br /&gt;
alias edit=&amp;#039;subl&amp;#039;                           # edit:         Opens any file in sublime editor&lt;br /&gt;
alias f=&amp;#039;open -a Finder ./&amp;#039;                 # f:            Opens current directory in MacOS Finder&lt;br /&gt;
alias ~=&amp;quot;cd ~&amp;quot;                              # ~:            Go Home&lt;br /&gt;
alias c=&amp;#039;clear&amp;#039;                             # c:            Clear terminal display&lt;br /&gt;
alias which=&amp;#039;type -all&amp;#039;                     # which:        Find executables&lt;br /&gt;
alias path=&amp;#039;echo -e ${PATH//:/\\n}&amp;#039;         # path:         Echo all executable Paths&lt;br /&gt;
alias show_options=&amp;#039;shopt&amp;#039;                  # Show_options: display bash options settings&lt;br /&gt;
alias fix_stty=&amp;#039;stty sane&amp;#039;                  # fix_stty:     Restore terminal settings when screwed up&lt;br /&gt;
alias cic=&amp;#039;set completion-ignore-case On&amp;#039;   # cic:          Make tab-completion case-insensitive&lt;br /&gt;
mcd () { mkdir -p &amp;quot;$1&amp;quot; &amp;amp;&amp;amp; cd &amp;quot;$1&amp;quot;; }        # mcd:          Makes new Dir and jumps inside&lt;br /&gt;
trash () { command mv &amp;quot;$@&amp;quot; ~/.Trash ; }     # trash:        Moves a file to the MacOS trash&lt;br /&gt;
ql () { qlmanage -p &amp;quot;$*&amp;quot; &amp;gt;&amp;amp; /dev/null; }    # ql:           Opens any file in MacOS Quicklook Preview&lt;br /&gt;
alias DT=&amp;#039;tee ~/Desktop/terminalOut.txt&amp;#039;    # DT:           Pipe content to file on MacOS Desktop&lt;br /&gt;
&lt;br /&gt;
#   lr:  Full Recursive Directory Listing&lt;br /&gt;
#   ------------------------------------------&lt;br /&gt;
alias lr=&amp;#039;ls -R | grep &amp;quot;:$&amp;quot; | sed -e &amp;#039;\&amp;#039;&amp;#039;s/:$//&amp;#039;\&amp;#039;&amp;#039; -e &amp;#039;\&amp;#039;&amp;#039;s/[^-][^\/]*\//--/g&amp;#039;\&amp;#039;&amp;#039; -e &amp;#039;\&amp;#039;&amp;#039;s/^/   /&amp;#039;\&amp;#039;&amp;#039; -e &amp;#039;\&amp;#039;&amp;#039;s/-/|/&amp;#039;\&amp;#039;&amp;#039; | less&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   mans:   Search manpage given in agument &amp;#039;1&amp;#039; for term given in argument &amp;#039;2&amp;#039; (case insensitive)&lt;br /&gt;
#           displays paginated result with colored search terms and two lines surrounding each hit.             Example: mans mplayer codec&lt;br /&gt;
#   --------------------------------------------------------------------&lt;br /&gt;
    mans () {&lt;br /&gt;
        man $1 | grep -iC2 --color=always $2 | less&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
#   showa: to remind yourself of an alias (given some part of it)&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    showa () { /usr/bin/grep --color=always -i -a1 $@ ~/Library/init/bash/aliases.bash | grep -v &amp;#039;^\s*$&amp;#039; | less -FSRXc ; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
#   3.  FILE AND FOLDER MANAGEMENT&lt;br /&gt;
#   -------------------------------&lt;br /&gt;
&lt;br /&gt;
zipf () { zip -r &amp;quot;$1&amp;quot;.zip &amp;quot;$1&amp;quot; ; }          # zipf:         To create a ZIP archive of a folder&lt;br /&gt;
alias numFiles=&amp;#039;echo $(ls -1 | wc -l)&amp;#039;      # numFiles:     Count of non-hidden files in current dir&lt;br /&gt;
alias make1mb=&amp;#039;mkfile 1m ./1MB.dat&amp;#039;         # make1mb:      Creates a file of 1mb size (all zeros)&lt;br /&gt;
alias make5mb=&amp;#039;mkfile 5m ./5MB.dat&amp;#039;         # make5mb:      Creates a file of 5mb size (all zeros)&lt;br /&gt;
alias make10mb=&amp;#039;mkfile 10m ./10MB.dat&amp;#039;      # make10mb:     Creates a file of 10mb size (all zeros)&lt;br /&gt;
&lt;br /&gt;
#   cdf:  &amp;#039;Cd&amp;#039;s to frontmost window of MacOS Finder&lt;br /&gt;
#   ------------------------------------------------------&lt;br /&gt;
    cdf () {&lt;br /&gt;
        currFolderPath=$( /usr/bin/osascript &amp;lt;&amp;lt;EOT&lt;br /&gt;
            tell application &amp;quot;Finder&amp;quot;&lt;br /&gt;
                try&lt;br /&gt;
            set currFolder to (folder of the front window as alias)&lt;br /&gt;
                on error&lt;br /&gt;
            set currFolder to (path to desktop folder as alias)&lt;br /&gt;
                end try&lt;br /&gt;
                POSIX path of currFolder&lt;br /&gt;
            end tell&lt;br /&gt;
EOT&lt;br /&gt;
        )&lt;br /&gt;
        echo &amp;quot;cd to \&amp;quot;$currFolderPath\&amp;quot;&amp;quot;&lt;br /&gt;
        cd &amp;quot;$currFolderPath&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
#   extract:  Extract most know archives with one command&lt;br /&gt;
#   ---------------------------------------------------------&lt;br /&gt;
    extract () {&lt;br /&gt;
        if [ -f $1 ] ; then&lt;br /&gt;
          case $1 in&lt;br /&gt;
            *.tar.bz2)   tar xjf $1     ;;&lt;br /&gt;
            *.tar.gz)    tar xzf $1     ;;&lt;br /&gt;
            *.bz2)       bunzip2 $1     ;;&lt;br /&gt;
            *.rar)       unrar e $1     ;;&lt;br /&gt;
            *.gz)        gunzip $1      ;;&lt;br /&gt;
            *.tar)       tar xf $1      ;;&lt;br /&gt;
            *.tbz2)      tar xjf $1     ;;&lt;br /&gt;
            *.tgz)       tar xzf $1     ;;&lt;br /&gt;
            *.zip)       unzip $1       ;;&lt;br /&gt;
            *.Z)         uncompress $1  ;;&lt;br /&gt;
            *.7z)        7z x $1        ;;&lt;br /&gt;
            *)     echo &amp;quot;&amp;#039;$1&amp;#039; cannot be extracted via extract()&amp;quot; ;;&lt;br /&gt;
             esac&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;&amp;#039;$1&amp;#039; is not a valid file&amp;quot;&lt;br /&gt;
         fi&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
#   4.  SEARCHING&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
&lt;br /&gt;
alias qfind=&amp;quot;find . -name &amp;quot;                 # qfind:    Quickly search for file&lt;br /&gt;
ff () { /usr/bin/find . -name &amp;quot;$@&amp;quot; ; }      # ff:       Find file under the current directory&lt;br /&gt;
ffs () { /usr/bin/find . -name &amp;quot;$@&amp;quot;&amp;#039;*&amp;#039; ; }  # ffs:      Find file whose name starts with a given string&lt;br /&gt;
ffe () { /usr/bin/find . -name &amp;#039;*&amp;#039;&amp;quot;$@&amp;quot; ; }  # ffe:      Find file whose name ends with a given string&lt;br /&gt;
&lt;br /&gt;
#   spotlight: Search for a file using MacOS Spotlight&amp;#039;s metadata&lt;br /&gt;
#   -----------------------------------------------------------&lt;br /&gt;
    spotlight () { mdfind &amp;quot;kMDItemDisplayName == &amp;#039;$@&amp;#039;wc&amp;quot;; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
#   5.  PROCESS MANAGEMENT&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
&lt;br /&gt;
#   findPid: find out the pid of a specified process&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
#       Note that the command name can be specified via a regex&lt;br /&gt;
#       E.g. findPid &amp;#039;/d$/&amp;#039; finds pids of all processes with names ending in &amp;#039;d&amp;#039;&lt;br /&gt;
#       Without the &amp;#039;sudo&amp;#039; it will only find processes of the current user&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    findPid () { lsof -t -c &amp;quot;$@&amp;quot; ; }&lt;br /&gt;
&lt;br /&gt;
#   memHogsTop, memHogsPs:  Find memory hogs&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    alias memHogsTop=&amp;#039;top -l 1 -o rsize | head -20&amp;#039;&lt;br /&gt;
    alias memHogsPs=&amp;#039;ps wwaxm -o pid,stat,vsize,rss,time,command | head -10&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   cpuHogs:  Find CPU hogs&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    alias cpu_hogs=&amp;#039;ps wwaxr -o pid,stat,%cpu,time,command | head -10&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   topForever:  Continual &amp;#039;top&amp;#039; listing (every 10 seconds)&lt;br /&gt;
#   -----------------------------------------------------&lt;br /&gt;
    alias topForever=&amp;#039;top -l 9999999 -s 10 -o cpu&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   ttop:  Recommended &amp;#039;top&amp;#039; invocation to minimize resources&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
#       Taken from this macosxhints article&lt;br /&gt;
#       http://www.macosxhints.com/article.php?story=20060816123853639&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    alias ttop=&amp;quot;top -R -F -s 10 -o rsize&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   my_ps: List processes owned by my user:&lt;br /&gt;
#   ------------------------------------------------------------&lt;br /&gt;
    my_ps() { ps $@ -u $USER -o pid,%cpu,%mem,start,time,bsdtime,command ; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
#   6.  NETWORKING&lt;br /&gt;
#   ---------------------------&lt;br /&gt;
&lt;br /&gt;
alias myip=&amp;#039;curl ip.appspot.com&amp;#039;                    # myip:         Public facing IP Address&lt;br /&gt;
alias netCons=&amp;#039;lsof -i&amp;#039;                             # netCons:      Show all open TCP/IP sockets&lt;br /&gt;
alias flushDNS=&amp;#039;dscacheutil -flushcache&amp;#039;            # flushDNS:     Flush out the DNS Cache&lt;br /&gt;
alias lsock=&amp;#039;sudo /usr/sbin/lsof -i -P&amp;#039;             # lsock:        Display open sockets&lt;br /&gt;
alias lsockU=&amp;#039;sudo /usr/sbin/lsof -nP | grep UDP&amp;#039;   # lsockU:       Display only open UDP sockets&lt;br /&gt;
alias lsockT=&amp;#039;sudo /usr/sbin/lsof -nP | grep TCP&amp;#039;   # lsockT:       Display only open TCP sockets&lt;br /&gt;
alias ipInfo0=&amp;#039;ipconfig getpacket en0&amp;#039;              # ipInfo0:      Get info on connections for en0&lt;br /&gt;
alias ipInfo1=&amp;#039;ipconfig getpacket en1&amp;#039;              # ipInfo1:      Get info on connections for en1&lt;br /&gt;
alias openPorts=&amp;#039;sudo lsof -i | grep LISTEN&amp;#039;        # openPorts:    All listening connections&lt;br /&gt;
alias showBlocked=&amp;#039;sudo ipfw list&amp;#039;                  # showBlocked:  All ipfw rules inc/ blocked IPs&lt;br /&gt;
&lt;br /&gt;
#   ii:  display useful host related informaton&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    ii() {&lt;br /&gt;
        echo -e &amp;quot;\nYou are logged on ${RED}$HOST&amp;quot;&lt;br /&gt;
        echo -e &amp;quot;\nAdditionnal information:$NC &amp;quot; ; uname -a&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Users logged on:$NC &amp;quot; ; w -h&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Current date :$NC &amp;quot; ; date&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Machine stats :$NC &amp;quot; ; uptime&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Current network location :$NC &amp;quot; ; scselect&lt;br /&gt;
        echo -e &amp;quot;\n${RED}Public facing IP Address :$NC &amp;quot; ;myip&lt;br /&gt;
        #echo -e &amp;quot;\n${RED}DNS Configuration:$NC &amp;quot; ; scutil --dns&lt;br /&gt;
        echo&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   7.  SYSTEMS OPERATIONS &amp;amp; INFORMATION&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
&lt;br /&gt;
alias mountReadWrite=&amp;#039;/sbin/mount -uw /&amp;#039;    # mountReadWrite:   For use when booted into single-user&lt;br /&gt;
&lt;br /&gt;
#   cleanupDS:  Recursively delete .DS_Store files&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    alias cleanupDS=&amp;quot;find . -type f -name &amp;#039;*.DS_Store&amp;#039; -ls -delete&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#   finderShowHidden:   Show hidden files in Finder&lt;br /&gt;
#   finderHideHidden:   Hide hidden files in Finder&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    alias finderShowHidden=&amp;#039;defaults write com.apple.finder ShowAllFiles TRUE&amp;#039;&lt;br /&gt;
    alias finderHideHidden=&amp;#039;defaults write com.apple.finder ShowAllFiles FALSE&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   cleanupLS:  Clean up LaunchServices to remove duplicates in the &amp;quot;Open With&amp;quot; menu&lt;br /&gt;
#   -----------------------------------------------------------------------------------&lt;br /&gt;
    alias cleanupLS=&amp;quot;/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user &amp;amp;&amp;amp; killall Finder&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#    screensaverDesktop: Run a screensaver on the Desktop&lt;br /&gt;
#   -----------------------------------------------------------------------------------&lt;br /&gt;
    alias screensaverDesktop=&amp;#039;/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background&amp;#039;&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   8.  WEB DEVELOPMENT&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
&lt;br /&gt;
alias apacheEdit=&amp;#039;sudo edit /etc/httpd/httpd.conf&amp;#039;      # apacheEdit:       Edit httpd.conf&lt;br /&gt;
alias apacheRestart=&amp;#039;sudo apachectl graceful&amp;#039;           # apacheRestart:    Restart Apache&lt;br /&gt;
alias editHosts=&amp;#039;sudo edit /etc/hosts&amp;#039;                  # editHosts:        Edit /etc/hosts file&lt;br /&gt;
alias herr=&amp;#039;tail /var/log/httpd/error_log&amp;#039;              # herr:             Tails HTTP error logs&lt;br /&gt;
alias apacheLogs=&amp;quot;less +F /var/log/apache2/error_log&amp;quot;   # Apachelogs:   Shows apache error logs&lt;br /&gt;
httpHeaders () { /usr/bin/curl -I -L $@ ; }             # httpHeaders:      Grabs headers from web page&lt;br /&gt;
&lt;br /&gt;
#   httpDebug:  Download a web page and show info on what took time&lt;br /&gt;
#   -------------------------------------------------------------------&lt;br /&gt;
    httpDebug () { /usr/bin/curl $@ -o /dev/null -w &amp;quot;dns: %{time_namelookup} connect: %{time_connect} pretransfer: %{time_pretransfer} starttransfer: %{time_starttransfer} total: %{time_total}\n&amp;quot; ; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   9.  REMINDERS &amp;amp; NOTES&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
&lt;br /&gt;
#   remove_disk: spin down unneeded disk&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   diskutil eject /dev/disk1s3&lt;br /&gt;
&lt;br /&gt;
#   to change the password on an encrypted disk image:&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   hdiutil chpass /path/to/the/diskimage&lt;br /&gt;
&lt;br /&gt;
#   to mount a read-only disk image as read-write:&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   hdiutil attach example.dmg -shadow /tmp/example.shadow -noverify&lt;br /&gt;
&lt;br /&gt;
#   mounting a removable drive (of type msdos or hfs)&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   mkdir /Volumes/Foo&lt;br /&gt;
#   ls /dev/disk*   to find out the device to use in the mount command)&lt;br /&gt;
#   mount -t msdos /dev/disk1s1 /Volumes/Foo&lt;br /&gt;
#   mount -t hfs /dev/disk1s1 /Volumes/Foo&lt;br /&gt;
&lt;br /&gt;
#   to create a file of a given size: /usr/sbin/mkfile or /usr/bin/hdiutil&lt;br /&gt;
#   ---------------------------------------&lt;br /&gt;
#   e.g.: mkfile 10m 10MB.dat&lt;br /&gt;
#   e.g.: hdiutil create -size 10m 10MB.dmg&lt;br /&gt;
#   the above create files that are almost all zeros - if random bytes are desired&lt;br /&gt;
#   then use: ~/Dev/Perl/randBytes 1048576 &amp;gt; 10MB.dat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipps und Tricks ==&lt;br /&gt;
=== Mit Terminal auf externe Festplatte zugreifen ===&lt;br /&gt;
 /Volumes&lt;br /&gt;
=== Dateien kopieren, bewegen, umbenennen ===&lt;br /&gt;
 https://www.macworld.com/article/222558/macos-command-line-copying-moving-files-terminal.html&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_FormBuilder_(Module)&amp;diff=25395</id>
		<title>ProcessWire - FormBuilder (Module)</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_FormBuilder_(Module)&amp;diff=25395"/>
		<updated>2021-08-30T14:55:56Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; https://processwire.com/store/form-builder/&lt;br /&gt;
&lt;br /&gt;
== Mails per smtp versenden ==&lt;br /&gt;
 [[ProcessWire - WireMailSmtp (Module)]]&lt;br /&gt;
&lt;br /&gt;
== CSS bei einfachem embed per iFrame anpassen ==&lt;br /&gt;
Einfache Lösung: &lt;br /&gt;
* auf Basic Output stellen&lt;br /&gt;
* Standard CSS von /site/templates/FormBuilder/main.css kopieren&lt;br /&gt;
* Neuen Pfad im Formbuilder Formular eingeben.&lt;br /&gt;
Nachteil, das könnte für den User zu kompliziert sein. &lt;br /&gt;
&lt;br /&gt;
== Import Daten für Standard Formular ==&lt;br /&gt;
Hiermit kann man schnell ein Formular erstellen. Einfach in Import Feld des Formbuilder kopieren.&lt;br /&gt;
Einfaches Standardformular:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;action&amp;quot;: &amp;quot;./&amp;quot;,&lt;br /&gt;
    &amp;quot;method&amp;quot;: &amp;quot;post&amp;quot;,&lt;br /&gt;
    &amp;quot;roles&amp;quot;: {&lt;br /&gt;
        &amp;quot;form-submit&amp;quot;: [&lt;br /&gt;
            &amp;quot;guest&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;form-list&amp;quot;: [],&lt;br /&gt;
        &amp;quot;form-edit&amp;quot;: [],&lt;br /&gt;
        &amp;quot;form-delete&amp;quot;: [],&lt;br /&gt;
        &amp;quot;entries-list&amp;quot;: [],&lt;br /&gt;
        &amp;quot;entries-edit&amp;quot;: [],&lt;br /&gt;
        &amp;quot;entries-delete&amp;quot;: [],&lt;br /&gt;
        &amp;quot;entries-page&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;framework&amp;quot;: &amp;quot;Basic&amp;quot;,&lt;br /&gt;
    &amp;quot;submitText&amp;quot;: &amp;quot;Senden&amp;quot;,&lt;br /&gt;
    &amp;quot;successMessage&amp;quot;: &amp;quot;Vielen Dank, ihre Nachricht wurde versendet.&amp;quot;,&lt;br /&gt;
    &amp;quot;errorMessage&amp;quot;: &amp;quot;Entschuldigung, das Formular konnte nicht versendet werden. Bitte füllen Sie alle Pflichtfelder aus. Zur Kontaktaufnahme benötigen wir entweder Ihre E-Mail oder Ihre Telefonnummer.&amp;quot;,&lt;br /&gt;
    &amp;quot;emailSubject&amp;quot;: &amp;quot;Nachricht über Ihr Kontaktformular&amp;quot;,&lt;br /&gt;
    &amp;quot;responderSubject&amp;quot;: &amp;quot;Auto-Response&amp;quot;,&lt;br /&gt;
    &amp;quot;saveFlags&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;emailTo&amp;quot;: &amp;quot;post@stephanschlegel.de&amp;quot;,&lt;br /&gt;
    &amp;quot;emailFrom&amp;quot;: &amp;quot;e_mail&amp;quot;,&lt;br /&gt;
    &amp;quot;submitText1018&amp;quot;: &amp;quot;Senden&amp;quot;,&lt;br /&gt;
    &amp;quot;successMessage1018&amp;quot;: &amp;quot;Vielen Dank, ihre Nachricht wurde versendet.&amp;quot;,&lt;br /&gt;
    &amp;quot;errorMessage1018&amp;quot;: &amp;quot;Entschuldigung, das Formular konnte nicht versendet werden. Bitte füllen Sie alle Pflichtfelder aus.&amp;quot;,&lt;br /&gt;
    &amp;quot;frBasic_cssURL&amp;quot;: &amp;quot;/site/templates/styles/forms.css&amp;quot;,&lt;br /&gt;
    &amp;quot;frFoundation_foundationURL&amp;quot;: &amp;quot;/site/modules/FormBuilder/frameworks/foundation/&amp;quot;,&lt;br /&gt;
    &amp;quot;frFoundation_horizHeaderClass&amp;quot;: &amp;quot;small-5 medium-3 right inline&amp;quot;,&lt;br /&gt;
    &amp;quot;frFoundation_horizContentClass&amp;quot;: &amp;quot;small-7 medium-9&amp;quot;,&lt;br /&gt;
    &amp;quot;frUikit_ukURL&amp;quot;: &amp;quot;/site/modules/FormBuilder/frameworks/uikit/&amp;quot;,&lt;br /&gt;
    &amp;quot;frUikit_css&amp;quot;: &amp;quot;uikit.gradient.min.css&amp;quot;,&lt;br /&gt;
    &amp;quot;frUikit_horizHeaderWidth&amp;quot;: 30,&lt;br /&gt;
    &amp;quot;frAdmin_styleSet&amp;quot;: &amp;quot;AdminThemeDefault/styles/main-classic.css&amp;quot;,&lt;br /&gt;
    &amp;quot;frBootstrap_bootURL&amp;quot;: &amp;quot;/site/modules/FormBuilder/frameworks/bootstrap/&amp;quot;,&lt;br /&gt;
    &amp;quot;frBootstrap_bootHorizHeaderClass&amp;quot;: &amp;quot;col-xs-5 col-sm-4 col-md-3&amp;quot;,&lt;br /&gt;
    &amp;quot;frBootstrap_bootHorizContentClass&amp;quot;: &amp;quot;col-xs-7 col-sm-8 col-md-9&amp;quot;,&lt;br /&gt;
    &amp;quot;children&amp;quot;: {&lt;br /&gt;
        &amp;quot;name_1&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;Text&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;Name&amp;quot;,&lt;br /&gt;
            &amp;quot;label1018&amp;quot;: &amp;quot;Ihr Name&amp;quot;,&lt;br /&gt;
            &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
            &amp;quot;requiredAttr&amp;quot;: 1&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;telefon&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;Text&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;Telefon&amp;quot;,&lt;br /&gt;
            &amp;quot;required&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;columnWidth&amp;quot;: 50,&lt;br /&gt;
            &amp;quot;label1018&amp;quot;: &amp;quot;Ihre Telefonnummer&amp;quot;,&lt;br /&gt;
            &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
            &amp;quot;requiredAttr&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;requiredIf&amp;quot;: &amp;quot;e_mail=&amp;#039;&amp;#039;&amp;quot;,&lt;br /&gt;
            &amp;quot;stripTags&amp;quot;: 1&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;e_mail&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;Text&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;E-Mail&amp;quot;,&lt;br /&gt;
            &amp;quot;required&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;columnWidth&amp;quot;: 50,&lt;br /&gt;
            &amp;quot;label1018&amp;quot;: &amp;quot;Ihre E-Mail&amp;quot;,&lt;br /&gt;
            &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
            &amp;quot;requiredIf&amp;quot;: &amp;quot;telefon=&amp;#039;&amp;#039;&amp;quot;,&lt;br /&gt;
            &amp;quot;stripTags&amp;quot;: 1&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;ihre_nachricht&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;Textarea&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;Ihre Nachricht&amp;quot;,&lt;br /&gt;
            &amp;quot;required&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;label1018&amp;quot;: &amp;quot;Ihre Nachricht&amp;quot;,&lt;br /&gt;
            &amp;quot;rows&amp;quot;: 5&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;datenschutz&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;Checkbox&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;Datenschutz&amp;quot;,&lt;br /&gt;
            &amp;quot;description&amp;quot;: &amp;quot;Mit meiner Kontaktaufnahme willige ich ein, dass meine Daten gespeichert und zur Bearbeitung meiner Anfrage/Kontaktaufnahme genutzt werden. Meine Daten werden niemals an Dritte weitergeleitet. Diese Einwilligung kann jederzeit widerrufen werden.&amp;quot;,&lt;br /&gt;
            &amp;quot;required&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;label1018&amp;quot;: &amp;quot;Datenschutz&amp;quot;,&lt;br /&gt;
            &amp;quot;description1018&amp;quot;: &amp;quot;Mit meiner Kontaktaufnahme willige ich ein, dass meine Daten gespeichert und zur Bearbeitung meiner Anfrage/Kontaktaufnahme genutzt werden. Meine Daten werden niemals an Dritte weitergeleitet. Diese Einwilligung kann jederzeit widerrufen werden.&amp;quot;,&lt;br /&gt;
            &amp;quot;checkedValue&amp;quot;: &amp;quot;Ich stimme zu&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Mit Adresse...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;roles&amp;quot;: {&lt;br /&gt;
        &amp;quot;form-submit&amp;quot;: [&lt;br /&gt;
            &amp;quot;guest&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;form-list&amp;quot;: [],&lt;br /&gt;
        &amp;quot;form-edit&amp;quot;: [],&lt;br /&gt;
        &amp;quot;form-delete&amp;quot;: [],&lt;br /&gt;
        &amp;quot;entries-list&amp;quot;: [],&lt;br /&gt;
        &amp;quot;entries-edit&amp;quot;: [],&lt;br /&gt;
        &amp;quot;entries-delete&amp;quot;: [],&lt;br /&gt;
        &amp;quot;entries-page&amp;quot;: []&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;framework&amp;quot;: &amp;quot;Basic&amp;quot;,&lt;br /&gt;
    &amp;quot;submitText&amp;quot;: &amp;quot;Senden&amp;quot;,&lt;br /&gt;
    &amp;quot;successMessage&amp;quot;: &amp;quot;Vielen Dank, ihre Nachricht wurde versendet.&amp;quot;,&lt;br /&gt;
    &amp;quot;errorMessage&amp;quot;: &amp;quot;Entschuldigung, das Formular konnte nicht versendet werden. Bitte füllen Sie alle Pflichtfelder aus. Zur Kontaktaufnahme benötigen wir entweder Ihre E-Mail oder Ihre Telefonnummer.&amp;quot;,&lt;br /&gt;
    &amp;quot;emailSubject&amp;quot;: &amp;quot;Nachricht über Ihr Kontaktformular&amp;quot;,&lt;br /&gt;
    &amp;quot;responderSubject&amp;quot;: &amp;quot;Auto-Response&amp;quot;,&lt;br /&gt;
    &amp;quot;saveFlags&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;emailTo&amp;quot;: &amp;quot;post@stephanschlegel.de&amp;quot;,&lt;br /&gt;
    &amp;quot;emailFrom&amp;quot;: &amp;quot;e_mail&amp;quot;,&lt;br /&gt;
    &amp;quot;submitText1018&amp;quot;: &amp;quot;Senden&amp;quot;,&lt;br /&gt;
    &amp;quot;successMessage1018&amp;quot;: &amp;quot;Vielen Dank, ihre Nachricht wurde versendet.&amp;quot;,&lt;br /&gt;
    &amp;quot;errorMessage1018&amp;quot;: &amp;quot;Entschuldigung, das Formular konnte nicht versendet werden. Bitte füllen Sie alle Pflichtfelder aus.&amp;quot;,&lt;br /&gt;
    &amp;quot;frBasic_cssURL&amp;quot;: &amp;quot;/site/templates/styles/forms.css&amp;quot;,&lt;br /&gt;
    &amp;quot;frFoundation_foundationURL&amp;quot;: &amp;quot;/site/modules/FormBuilder/frameworks/foundation/&amp;quot;,&lt;br /&gt;
    &amp;quot;frFoundation_horizHeaderClass&amp;quot;: &amp;quot;small-5 medium-3 right inline&amp;quot;,&lt;br /&gt;
    &amp;quot;frFoundation_horizContentClass&amp;quot;: &amp;quot;small-7 medium-9&amp;quot;,&lt;br /&gt;
    &amp;quot;frUikit_ukURL&amp;quot;: &amp;quot;/site/modules/FormBuilder/frameworks/uikit/&amp;quot;,&lt;br /&gt;
    &amp;quot;frUikit_css&amp;quot;: &amp;quot;uikit.gradient.min.css&amp;quot;,&lt;br /&gt;
    &amp;quot;frUikit_horizHeaderWidth&amp;quot;: 30,&lt;br /&gt;
    &amp;quot;frAdmin_styleSet&amp;quot;: &amp;quot;AdminThemeDefault/styles/main-classic.css&amp;quot;,&lt;br /&gt;
    &amp;quot;frBootstrap_bootURL&amp;quot;: &amp;quot;/site/modules/FormBuilder/frameworks/bootstrap/&amp;quot;,&lt;br /&gt;
    &amp;quot;frBootstrap_bootHorizHeaderClass&amp;quot;: &amp;quot;col-xs-5 col-sm-4 col-md-3&amp;quot;,&lt;br /&gt;
    &amp;quot;frBootstrap_bootHorizContentClass&amp;quot;: &amp;quot;col-xs-7 col-sm-8 col-md-9&amp;quot;,&lt;br /&gt;
    &amp;quot;children&amp;quot;: {&lt;br /&gt;
        &amp;quot;name_1&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;Text&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;Name&amp;quot;,&lt;br /&gt;
            &amp;quot;label1018&amp;quot;: &amp;quot;Ihr Name&amp;quot;,&lt;br /&gt;
            &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
            &amp;quot;requiredAttr&amp;quot;: 1&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;telefon&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;Text&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;Telefon&amp;quot;,&lt;br /&gt;
            &amp;quot;required&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;columnWidth&amp;quot;: 50,&lt;br /&gt;
            &amp;quot;label1018&amp;quot;: &amp;quot;Ihre Telefonnummer&amp;quot;,&lt;br /&gt;
            &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
            &amp;quot;requiredAttr&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;requiredIf&amp;quot;: &amp;quot;e_mail=&amp;#039;&amp;#039;&amp;quot;,&lt;br /&gt;
            &amp;quot;stripTags&amp;quot;: 1&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;e_mail&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;Text&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;E-Mail&amp;quot;,&lt;br /&gt;
            &amp;quot;required&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;columnWidth&amp;quot;: 50,&lt;br /&gt;
            &amp;quot;label1018&amp;quot;: &amp;quot;Ihre E-Mail&amp;quot;,&lt;br /&gt;
            &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
            &amp;quot;requiredIf&amp;quot;: &amp;quot;telefon=&amp;#039;&amp;#039;&amp;quot;,&lt;br /&gt;
            &amp;quot;stripTags&amp;quot;: 1&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;ihre_adresse&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;Text&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;Straße&amp;quot;,&lt;br /&gt;
            &amp;quot;columnWidth&amp;quot;: 80,&lt;br /&gt;
            &amp;quot;label1018&amp;quot;: &amp;quot;Straße&amp;quot;,&lt;br /&gt;
            &amp;quot;requiredAttr&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;maxlength&amp;quot;: 2048,&lt;br /&gt;
            &amp;quot;size&amp;quot;: 100&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;hausnummer&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;Text&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;Hausnr.&amp;quot;,&lt;br /&gt;
            &amp;quot;required&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;columnWidth&amp;quot;: 20,&lt;br /&gt;
            &amp;quot;label1018&amp;quot;: &amp;quot;Hausnr.&amp;quot;,&lt;br /&gt;
            &amp;quot;maxlength&amp;quot;: 2048&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;plz_ort&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;Text&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;PLZ Ort&amp;quot;,&lt;br /&gt;
            &amp;quot;label1018&amp;quot;: &amp;quot;PLZ Ort&amp;quot;,&lt;br /&gt;
            &amp;quot;maxlength&amp;quot;: 2048&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;ihre_nachricht&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;Textarea&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;Ihre Nachricht&amp;quot;,&lt;br /&gt;
            &amp;quot;required&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;label1018&amp;quot;: &amp;quot;Ihre Nachricht&amp;quot;,&lt;br /&gt;
            &amp;quot;rows&amp;quot;: 5,&lt;br /&gt;
            &amp;quot;requiredAttr&amp;quot;: 1&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;datenschutz&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;Checkbox&amp;quot;,&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;Datenschutz&amp;quot;,&lt;br /&gt;
            &amp;quot;description&amp;quot;: &amp;quot;Mit meiner Kontaktaufnahme willige ich ein, dass meine Daten gespeichert und zur Bearbeitung meiner Anfrage/Kontaktaufnahme genutzt werden. Meine Daten werden niemals an Dritte weitergeleitet. Diese Einwilligung kann jederzeit widerrufen werden.&amp;quot;,&lt;br /&gt;
            &amp;quot;required&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;label1018&amp;quot;: &amp;quot;Datenschutz&amp;quot;,&lt;br /&gt;
            &amp;quot;description1018&amp;quot;: &amp;quot;Mit meiner Kontaktaufnahme willige ich ein, dass meine Daten gespeichert und zur Bearbeitung meiner Anfrage/Kontaktaufnahme genutzt werden. Meine Daten werden niemals an Dritte weitergeleitet. Diese Einwilligung kann jederzeit widerrufen werden.&amp;quot;,&lt;br /&gt;
            &amp;quot;checkedValue&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Tipps und Tricks für Formbuilder==&lt;br /&gt;
=== Links in Checkbox-Label ===&lt;br /&gt;
HTML geht nicht aber Markdown funktioniert:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ich habe die [Datenschutzerklärung](https://fbz-vet.de/datenschutz) gelesen und willige in die dort dargestellte Verarbeitung meiner personenbezogenen Daten ein.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Troubleshooting&amp;diff=25394</id>
		<title>ProcessWire - Troubleshooting</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Troubleshooting&amp;diff=25394"/>
		<updated>2021-08-23T17:09:07Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: /* Datenbank Fehler auf Strato */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Processwire Probleme lösen:&lt;br /&gt;
&lt;br /&gt;
Links&lt;br /&gt;
&lt;br /&gt;
* https://processwire.com/docs/tutorials/troubleshooting-guide/&lt;br /&gt;
&lt;br /&gt;
== 500 Error auf 1und1 Server ==&lt;br /&gt;
.htaccess File anpassen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
  # 19. Pass control to ProcessWire if all the above directives allow us to this point.&lt;br /&gt;
  # For regular VirtualHosts (most installs)&lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
  #RewriteRule ^(.*)$ index.php?it=$1 [L,QSA]&lt;br /&gt;
&lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
  # 20. If using VirtualDocumentRoot (500 NOTE): comment out the one above and use this one instead&lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
   RewriteRule ^(.*)$ /index.php?it=$1 [L,QSA]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Datenbank Fehler auf Strato ==&lt;br /&gt;
Access Denied auf Strato obwohl die Credentials stimmen. &lt;br /&gt;
&lt;br /&gt;
Diese Konfiguration hat funktioniert&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#################################################################################################&lt;br /&gt;
# START PROCESSWIRE HTACCESS DIRECTIVES&lt;br /&gt;
# @htaccessVersion 301&lt;br /&gt;
# @indexVersion 300&lt;br /&gt;
#################################################################################################&lt;br /&gt;
&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
# 1. Don&amp;#039;t show directory indexes, but do follow symbolic links &lt;br /&gt;
# 500 NOTE: Some cloud hosting companies don&amp;#039;t allow +FollowSymLinks. &lt;br /&gt;
# Uncomment +SymLinksifOwnerMatch and comment +FollowSymLinks if you have 500 errors. &lt;br /&gt;
# If that doesn&amp;#039;t resolve the error, then set it back to +FollowSymLinks. &lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Options -Indexes&lt;br /&gt;
Options +FollowSymLinks&lt;br /&gt;
# Options +SymLinksifOwnerMatch&lt;br /&gt;
&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
# 2. Let ProcessWire handle 404s&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
ErrorDocument 404 /index.php&lt;br /&gt;
&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
# 3. Handle request for missing favicon.ico/robots.txt files (no ending quote for Apache 1.3)&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Files favicon.ico&amp;gt;&lt;br /&gt;
  ErrorDocument 404 &amp;quot;The requested file favicon.ico was not found.&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Files robots.txt&amp;gt;&lt;br /&gt;
  ErrorDocument 404 &amp;quot;The requested file robots.txt was not found.&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
# 4. Protect from XSS with Apache headers&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule mod_headers.c&amp;gt;&lt;br /&gt;
  # prevent site from being loaded in an iframe on another site&lt;br /&gt;
  # you will need to remove this one if you want to allow external iframes&lt;br /&gt;
  Header always append X-Frame-Options SAMEORIGIN &lt;br /&gt;
&lt;br /&gt;
  # to prevent cross site scripting (IE8+ proprietary)&lt;br /&gt;
  Header set X-XSS-Protection &amp;quot;1; mode=block&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  # prevent mime-based attacks via content sniffing (IE+Chrome)&lt;br /&gt;
  # Header set X-Content-Type-Options &amp;quot;nosniff&amp;quot; &lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
# 5. Protect ProcessWire system files &lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FilesMatch &amp;quot;\.(inc|info|info\.json|module|sh|sql)$|^\..*$|composer\.(json|lock)$&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;IfModule mod_authz_core.c&amp;gt;&lt;br /&gt;
    Require all denied&lt;br /&gt;
  &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
  &amp;lt;IfModule !mod_authz_core.c&amp;gt;&lt;br /&gt;
    Order allow,deny&lt;br /&gt;
  &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
# 6. Override a few PHP settings that can&amp;#039;t be changed at runtime (not required)&lt;br /&gt;
# 500 NOTE: Try commenting out this entire section below if getting Apache 500 errors.&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
  php_flag magic_quotes_gpc		off&lt;br /&gt;
  php_flag magic_quotes_sybase		off&lt;br /&gt;
  php_flag register_globals		off&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
# 7. Set default directory index files&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
DirectoryIndex index.php index.html index.htm&lt;br /&gt;
&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
# 8. ProcessWire requires mod_rewrite&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule mod_rewrite.c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  RewriteEngine On&lt;br /&gt;
  AddDefaultCharset UTF-8&lt;br /&gt;
&lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
  # 9. If you only want to allow HTTPS, uncomment the RewriteCond and RewriteRule lines below.&lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
  # RewriteCond %{HTTPS} off&lt;br /&gt;
  # RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]&lt;br /&gt;
  &lt;br /&gt;
  # If using an AWS load balancer, use these two lines below instead of those above:&lt;br /&gt;
  # RewriteCond %{HTTP:X-Forwarded-Proto} =http &lt;br /&gt;
  # RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]&lt;br /&gt;
&lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
  # 10. Set an environment variable so the installer can detect that mod_rewrite is active.&lt;br /&gt;
  # Note that some web hosts don&amp;#039;t support this. If you get a 500 error, you might try &lt;br /&gt;
  # commenting out this SetEnv line below. &lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;IfModule mod_env.c&amp;gt;&lt;br /&gt;
    SetEnv HTTP_MOD_REWRITE On&lt;br /&gt;
  &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
  # 11. OPTIONAL: Set a rewrite base if rewrites aren&amp;#039;t working properly on your server.&lt;br /&gt;
  # And if your site directory starts with a &amp;quot;~&amp;quot; you will most likely have to use this.&lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
  # RewriteBase /&lt;br /&gt;
  # RewriteBase /pw/&lt;br /&gt;
  # RewriteBase /~user/&lt;br /&gt;
&lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
  # 12. Access Restrictions: Keep web users out of dirs that begin with a period,&lt;br /&gt;
  # but let services like Lets Encrypt use the webroot authentication method.&lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
  RewriteRule &amp;quot;(^|/)\.(?!well-known)&amp;quot; - [F]&lt;br /&gt;
&lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
  # 13. OPTIONAL: Redirect users to the &amp;#039;www.&amp;#039; version of the site (uncomment to enable).&lt;br /&gt;
  # For example: http://processwire.com/ would be redirected to http://www.processwire.com/&lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
  # RewriteCond %{HTTP_HOST} !^www\. [NC]&lt;br /&gt;
  # RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]&lt;br /&gt;
&lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
  # 14. OPTIONAL: Send URLs with non-ASCII name-format characters to 404 page (optimization)&lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
&lt;br /&gt;
  # RewriteCond %{REQUEST_URI} &amp;quot;[^-_.a-zA-Z0-9/~]&amp;quot;&lt;br /&gt;
  # RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
  # RewriteCond %{REQUEST_FILENAME} !-d&lt;br /&gt;
  # RewriteRule ^(.*)$ index.php?it=/http404/ [L,QSA]&lt;br /&gt;
&lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
  # 15. Access Restrictions: Protect ProcessWire system files&lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
  # Allow screenshot files (for install.php only: this 1 line below may be removed after install)&lt;br /&gt;
  RewriteCond %{REQUEST_URI} !(^|/)site-[^/]+/install/[^/]+\.(jpg|jpeg|png|gif)$&lt;br /&gt;
  # Block access to any htaccess files&lt;br /&gt;
  RewriteCond %{REQUEST_URI} (^|/)\.htaccess$ [NC,OR]&lt;br /&gt;
  # Block access to protected assets directories&lt;br /&gt;
  RewriteCond %{REQUEST_URI} (^|/)(site|site-[^/]+)/assets/(cache|logs|backups|sessions|config|install|tmp)($|/.*$) [OR]&lt;br /&gt;
  # Block acceess to the /site/install/ directory&lt;br /&gt;
  RewriteCond %{REQUEST_URI} (^|/)(site|site-[^/]+)/install($|/.*$) [OR]&lt;br /&gt;
  # Block dirs in /site/assets/ dirs that start with a hyphen&lt;br /&gt;
  RewriteCond %{REQUEST_URI} (^|/)(site|site-[^/]+)/assets.*/-.+/.* [OR]&lt;br /&gt;
  # Block access to /wire/config.php, /site/config.php, /site/config-dev.php, and /wire/index.config.php&lt;br /&gt;
  RewriteCond %{REQUEST_URI} (^|/)(wire|site|site-[^/]+)/(config|index\.config|config-dev)\.php$ [OR]&lt;br /&gt;
  # Block access to any PHP-based files in /templates-admin/&lt;br /&gt;
  RewriteCond %{REQUEST_URI} (^|/)(wire|site|site-[^/]+)/templates-admin($|/|/.*\.(php|html?|tpl|inc))$ [OR]&lt;br /&gt;
  # Block access to any PHP or markup files in /site/templates/&lt;br /&gt;
  RewriteCond %{REQUEST_URI} (^|/)(site|site-[^/]+)/templates($|/|/.*\.(php|html?|tpl|inc))$ [OR]&lt;br /&gt;
  # Block access to any PHP files in /site/assets/&lt;br /&gt;
  RewriteCond %{REQUEST_URI} (^|/)(site|site-[^/]+)/assets($|/|/.*\.php)$ [OR]&lt;br /&gt;
  # Block access to any PHP files in core or core module directories&lt;br /&gt;
  RewriteCond %{REQUEST_URI} (^|/)wire/(core|modules)/.*\.(php|inc|tpl|module|info\.json)$ [OR]&lt;br /&gt;
  # Block access to any PHP files in /site/modules/&lt;br /&gt;
  RewriteCond %{REQUEST_URI} (^|/)(site|site-[^/]+)/modules/.*\.(php|inc|tpl|module|info\.json)$ [OR]&lt;br /&gt;
  # Block access to any software identifying txt files&lt;br /&gt;
  RewriteCond %{REQUEST_URI} (^|/)(COPYRIGHT|INSTALL|README|htaccess)\.(txt|md|textile)$ [OR]&lt;br /&gt;
  # Block all http access to the default/uninstalled site-default directory&lt;br /&gt;
  RewriteCond %{REQUEST_URI} (^|/)site-default/&lt;br /&gt;
  # If any conditions above match, issue a 403 forbidden&lt;br /&gt;
  RewriteRule ^.*$ - [F,L]&lt;br /&gt;
&lt;br /&gt;
  # PW-PAGENAME&lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
  # 16a. Ensure that the URL follows the name-format specification required by PW&lt;br /&gt;
  # See also directive 16b below, you should choose and use either 16a or 16b. &lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
&lt;br /&gt;
  RewriteCond %{REQUEST_URI} &amp;quot;^/~?[-_.a-zA-Z0-9/]*$&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
  # 16b. Alternative name-format specification for UTF8 page name support.&lt;br /&gt;
  # If used, comment out section 16a above and uncomment the directive below. If you have updated &lt;br /&gt;
  # your $config-&amp;gt;pageNameWhitelist make the characters below consistent with that. &lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
  &lt;br /&gt;
  # RewriteCond %{REQUEST_URI} &amp;quot;^/~?[-_./a-zA-Z0-9æåäßöüđжхцчшщюяàáâèéëêěìíïîõòóôøùúûůñçčćďĺľńňŕřšťýžабвгдеёзийклмнопрстуфыэęąśłżź]*$&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  # END-PW-PAGENAME&lt;br /&gt;
&lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
  # 17. If the request is for a file or directory that physically exists on the server,&lt;br /&gt;
  # then don&amp;#039;t give control to ProcessWire, and instead load the file&lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
&lt;br /&gt;
  RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
  RewriteCond %{REQUEST_FILENAME} !-d&lt;br /&gt;
  RewriteCond %{REQUEST_FILENAME} !(favicon\.ico|robots\.txt)&lt;br /&gt;
&lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
  # 18. OPTIONAL: Prevent ProcessWire from attempting to serve images or anything in /site/assets/. &lt;br /&gt;
  # Both of these lines are optional, but can help to reduce server load. However, they&lt;br /&gt;
  # are not compatible with the $config-&amp;gt;pagefileSecure option (if enabled) and they &lt;br /&gt;
  # may produce an Apache 404 rather than your regular 404. You may uncomment the two lines&lt;br /&gt;
  # below if you don&amp;#039;t need to use the $config-&amp;gt;pagefileSecure option. After uncommenting, test&lt;br /&gt;
  # a URL like domain.com/site/assets/files/test.jpg to make sure you are getting a 404 and not&lt;br /&gt;
  # your homepage. If getting your homepage, then either: do not use this option, or comment out &lt;br /&gt;
  # section #2 above that makes ProcessWire the 404 handler. &lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
&lt;br /&gt;
  # RewriteCond %{REQUEST_FILENAME} !\.(jpg|jpeg|gif|png|ico)$ [NC]&lt;br /&gt;
  # RewriteCond %{REQUEST_FILENAME} !(^|/)site/assets/&lt;br /&gt;
&lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
  # 19. Pass control to ProcessWire if all the above directives allow us to this point.&lt;br /&gt;
  # For regular VirtualHosts (most installs)&lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
  RewriteRule ^(.*)$ index.php?it=$1 [L,QSA]&lt;br /&gt;
&lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
  # 20. If using VirtualDocumentRoot (500 NOTE): comment out the one above and use this one instead&lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
  # RewriteRule ^(.*)$ /index.php?it=$1 [L,QSA]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#################################################################################################&lt;br /&gt;
# END PROCESSWIRE HTACCESS DIRECTIVES&lt;br /&gt;
#################################################################################################&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Troubleshooting&amp;diff=25393</id>
		<title>ProcessWire - Troubleshooting</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Troubleshooting&amp;diff=25393"/>
		<updated>2021-08-23T17:07:25Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Processwire Probleme lösen:&lt;br /&gt;
&lt;br /&gt;
Links&lt;br /&gt;
&lt;br /&gt;
* https://processwire.com/docs/tutorials/troubleshooting-guide/&lt;br /&gt;
&lt;br /&gt;
== 500 Error auf 1und1 Server ==&lt;br /&gt;
.htaccess File anpassen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
  # 19. Pass control to ProcessWire if all the above directives allow us to this point.&lt;br /&gt;
  # For regular VirtualHosts (most installs)&lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
  #RewriteRule ^(.*)$ index.php?it=$1 [L,QSA]&lt;br /&gt;
&lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
  # 20. If using VirtualDocumentRoot (500 NOTE): comment out the one above and use this one instead&lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
   RewriteRule ^(.*)$ /index.php?it=$1 [L,QSA]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Datenbank Fehler auf Strato ==&lt;br /&gt;
Access Denied auf Strato obwohl die Credentials stimmen. &lt;br /&gt;
&amp;lt;pre&amp;gt; htaccess ändern wie bei 1und1 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#################################################################################################&lt;br /&gt;
# START PROCESSWIRE HTACCESS DIRECTIVES&lt;br /&gt;
# @htaccessVersion 301&lt;br /&gt;
# @indexVersion 300&lt;br /&gt;
#################################################################################################&lt;br /&gt;
&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
# 1. Don&amp;#039;t show directory indexes, but do follow symbolic links &lt;br /&gt;
# 500 NOTE: Some cloud hosting companies don&amp;#039;t allow +FollowSymLinks. &lt;br /&gt;
# Uncomment +SymLinksifOwnerMatch and comment +FollowSymLinks if you have 500 errors. &lt;br /&gt;
# If that doesn&amp;#039;t resolve the error, then set it back to +FollowSymLinks. &lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Options -Indexes&lt;br /&gt;
Options +FollowSymLinks&lt;br /&gt;
# Options +SymLinksifOwnerMatch&lt;br /&gt;
&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
# 2. Let ProcessWire handle 404s&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
ErrorDocument 404 /index.php&lt;br /&gt;
&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
# 3. Handle request for missing favicon.ico/robots.txt files (no ending quote for Apache 1.3)&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Files favicon.ico&amp;gt;&lt;br /&gt;
  ErrorDocument 404 &amp;quot;The requested file favicon.ico was not found.&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Files robots.txt&amp;gt;&lt;br /&gt;
  ErrorDocument 404 &amp;quot;The requested file robots.txt was not found.&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
# 4. Protect from XSS with Apache headers&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule mod_headers.c&amp;gt;&lt;br /&gt;
  # prevent site from being loaded in an iframe on another site&lt;br /&gt;
  # you will need to remove this one if you want to allow external iframes&lt;br /&gt;
  Header always append X-Frame-Options SAMEORIGIN &lt;br /&gt;
&lt;br /&gt;
  # to prevent cross site scripting (IE8+ proprietary)&lt;br /&gt;
  Header set X-XSS-Protection &amp;quot;1; mode=block&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  # prevent mime-based attacks via content sniffing (IE+Chrome)&lt;br /&gt;
  # Header set X-Content-Type-Options &amp;quot;nosniff&amp;quot; &lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
# 5. Protect ProcessWire system files &lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&amp;lt;FilesMatch &amp;quot;\.(inc|info|info\.json|module|sh|sql)$|^\..*$|composer\.(json|lock)$&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;IfModule mod_authz_core.c&amp;gt;&lt;br /&gt;
    Require all denied&lt;br /&gt;
  &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
  &amp;lt;IfModule !mod_authz_core.c&amp;gt;&lt;br /&gt;
    Order allow,deny&lt;br /&gt;
  &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
# 6. Override a few PHP settings that can&amp;#039;t be changed at runtime (not required)&lt;br /&gt;
# 500 NOTE: Try commenting out this entire section below if getting Apache 500 errors.&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
  php_flag magic_quotes_gpc		off&lt;br /&gt;
  php_flag magic_quotes_sybase		off&lt;br /&gt;
  php_flag register_globals		off&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
# 7. Set default directory index files&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
DirectoryIndex index.php index.html index.htm&lt;br /&gt;
&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
# 8. ProcessWire requires mod_rewrite&lt;br /&gt;
# -----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule mod_rewrite.c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  RewriteEngine On&lt;br /&gt;
  AddDefaultCharset UTF-8&lt;br /&gt;
&lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
  # 9. If you only want to allow HTTPS, uncomment the RewriteCond and RewriteRule lines below.&lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
  # RewriteCond %{HTTPS} off&lt;br /&gt;
  # RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]&lt;br /&gt;
  &lt;br /&gt;
  # If using an AWS load balancer, use these two lines below instead of those above:&lt;br /&gt;
  # RewriteCond %{HTTP:X-Forwarded-Proto} =http &lt;br /&gt;
  # RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]&lt;br /&gt;
&lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
  # 10. Set an environment variable so the installer can detect that mod_rewrite is active.&lt;br /&gt;
  # Note that some web hosts don&amp;#039;t support this. If you get a 500 error, you might try &lt;br /&gt;
  # commenting out this SetEnv line below. &lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;IfModule mod_env.c&amp;gt;&lt;br /&gt;
    SetEnv HTTP_MOD_REWRITE On&lt;br /&gt;
  &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
  # 11. OPTIONAL: Set a rewrite base if rewrites aren&amp;#039;t working properly on your server.&lt;br /&gt;
  # And if your site directory starts with a &amp;quot;~&amp;quot; you will most likely have to use this.&lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
  # RewriteBase /&lt;br /&gt;
  # RewriteBase /pw/&lt;br /&gt;
  # RewriteBase /~user/&lt;br /&gt;
&lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
  # 12. Access Restrictions: Keep web users out of dirs that begin with a period,&lt;br /&gt;
  # but let services like Lets Encrypt use the webroot authentication method.&lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
  RewriteRule &amp;quot;(^|/)\.(?!well-known)&amp;quot; - [F]&lt;br /&gt;
&lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
  # 13. OPTIONAL: Redirect users to the &amp;#039;www.&amp;#039; version of the site (uncomment to enable).&lt;br /&gt;
  # For example: http://processwire.com/ would be redirected to http://www.processwire.com/&lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
  # RewriteCond %{HTTP_HOST} !^www\. [NC]&lt;br /&gt;
  # RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]&lt;br /&gt;
&lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
  # 14. OPTIONAL: Send URLs with non-ASCII name-format characters to 404 page (optimization)&lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
&lt;br /&gt;
  # RewriteCond %{REQUEST_URI} &amp;quot;[^-_.a-zA-Z0-9/~]&amp;quot;&lt;br /&gt;
  # RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
  # RewriteCond %{REQUEST_FILENAME} !-d&lt;br /&gt;
  # RewriteRule ^(.*)$ index.php?it=/http404/ [L,QSA]&lt;br /&gt;
&lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
  # 15. Access Restrictions: Protect ProcessWire system files&lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
  # Allow screenshot files (for install.php only: this 1 line below may be removed after install)&lt;br /&gt;
  RewriteCond %{REQUEST_URI} !(^|/)site-[^/]+/install/[^/]+\.(jpg|jpeg|png|gif)$&lt;br /&gt;
  # Block access to any htaccess files&lt;br /&gt;
  RewriteCond %{REQUEST_URI} (^|/)\.htaccess$ [NC,OR]&lt;br /&gt;
  # Block access to protected assets directories&lt;br /&gt;
  RewriteCond %{REQUEST_URI} (^|/)(site|site-[^/]+)/assets/(cache|logs|backups|sessions|config|install|tmp)($|/.*$) [OR]&lt;br /&gt;
  # Block acceess to the /site/install/ directory&lt;br /&gt;
  RewriteCond %{REQUEST_URI} (^|/)(site|site-[^/]+)/install($|/.*$) [OR]&lt;br /&gt;
  # Block dirs in /site/assets/ dirs that start with a hyphen&lt;br /&gt;
  RewriteCond %{REQUEST_URI} (^|/)(site|site-[^/]+)/assets.*/-.+/.* [OR]&lt;br /&gt;
  # Block access to /wire/config.php, /site/config.php, /site/config-dev.php, and /wire/index.config.php&lt;br /&gt;
  RewriteCond %{REQUEST_URI} (^|/)(wire|site|site-[^/]+)/(config|index\.config|config-dev)\.php$ [OR]&lt;br /&gt;
  # Block access to any PHP-based files in /templates-admin/&lt;br /&gt;
  RewriteCond %{REQUEST_URI} (^|/)(wire|site|site-[^/]+)/templates-admin($|/|/.*\.(php|html?|tpl|inc))$ [OR]&lt;br /&gt;
  # Block access to any PHP or markup files in /site/templates/&lt;br /&gt;
  RewriteCond %{REQUEST_URI} (^|/)(site|site-[^/]+)/templates($|/|/.*\.(php|html?|tpl|inc))$ [OR]&lt;br /&gt;
  # Block access to any PHP files in /site/assets/&lt;br /&gt;
  RewriteCond %{REQUEST_URI} (^|/)(site|site-[^/]+)/assets($|/|/.*\.php)$ [OR]&lt;br /&gt;
  # Block access to any PHP files in core or core module directories&lt;br /&gt;
  RewriteCond %{REQUEST_URI} (^|/)wire/(core|modules)/.*\.(php|inc|tpl|module|info\.json)$ [OR]&lt;br /&gt;
  # Block access to any PHP files in /site/modules/&lt;br /&gt;
  RewriteCond %{REQUEST_URI} (^|/)(site|site-[^/]+)/modules/.*\.(php|inc|tpl|module|info\.json)$ [OR]&lt;br /&gt;
  # Block access to any software identifying txt files&lt;br /&gt;
  RewriteCond %{REQUEST_URI} (^|/)(COPYRIGHT|INSTALL|README|htaccess)\.(txt|md|textile)$ [OR]&lt;br /&gt;
  # Block all http access to the default/uninstalled site-default directory&lt;br /&gt;
  RewriteCond %{REQUEST_URI} (^|/)site-default/&lt;br /&gt;
  # If any conditions above match, issue a 403 forbidden&lt;br /&gt;
  RewriteRule ^.*$ - [F,L]&lt;br /&gt;
&lt;br /&gt;
  # PW-PAGENAME&lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
  # 16a. Ensure that the URL follows the name-format specification required by PW&lt;br /&gt;
  # See also directive 16b below, you should choose and use either 16a or 16b. &lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
&lt;br /&gt;
  RewriteCond %{REQUEST_URI} &amp;quot;^/~?[-_.a-zA-Z0-9/]*$&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
  # 16b. Alternative name-format specification for UTF8 page name support.&lt;br /&gt;
  # If used, comment out section 16a above and uncomment the directive below. If you have updated &lt;br /&gt;
  # your $config-&amp;gt;pageNameWhitelist make the characters below consistent with that. &lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
  &lt;br /&gt;
  # RewriteCond %{REQUEST_URI} &amp;quot;^/~?[-_./a-zA-Z0-9æåäßöüđжхцчшщюяàáâèéëêěìíïîõòóôøùúûůñçčćďĺľńňŕřšťýžабвгдеёзийклмнопрстуфыэęąśłżź]*$&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  # END-PW-PAGENAME&lt;br /&gt;
&lt;br /&gt;
  # PROCACHE v2/a38e52c7571ac9b16e1f4985c2c29242 --------------------------------------------------&lt;br /&gt;
  RewriteCond %{REQUEST_METHOD} !=POST&lt;br /&gt;
  RewriteCond %{QUERY_STRING} !.*=.*&lt;br /&gt;
  RewriteRule ^.*$ - [E=pwpcstep:pour,E=pwpcname:index]&lt;br /&gt;
  RewriteCond %{ENV:pwpcstep} &amp;quot;=pour&amp;quot;&lt;br /&gt;
  RewriteCond %{HTTP_COOKIE} !^.*(wire_challenge|wires_challenge).*$&lt;br /&gt;
  RewriteRule ^.*$ - [E=pwpcstep:stir,E=pwpcpath:%{DOCUMENT_ROOT}/site/assets/ProCache-b90673484900986618ef6c6fe36cf0]&lt;br /&gt;
  RewriteCond %{ENV:pwpcstep} &amp;quot;=stir&amp;quot;&lt;br /&gt;
  RewriteCond %{ENV:pwpcpath}/$0/%{ENV:pwpcname}.html -f&lt;br /&gt;
  RewriteRule ^.*$ - [E=pwpcstep:drink,E=pwpcfile:$0/%{ENV:pwpcname}.html]&lt;br /&gt;
  RewriteCond %{ENV:pwpcstep} &amp;quot;=drink&amp;quot;&lt;br /&gt;
  RewriteRule ^(.*) %{ENV:pwpcpath}/%{ENV:pwpcfile} [L]&lt;br /&gt;
  &amp;lt;ifModule mod_headers.c&amp;gt;&lt;br /&gt;
  Header set X-PWPC &amp;quot;ProCache&amp;quot; env=pwpcstep&lt;br /&gt;
  Header set X-Powered-By &amp;quot;ProcessWire CMS, ProCache&amp;quot; env=pwpcstep&lt;br /&gt;
  &amp;lt;/ifModule&amp;gt;&lt;br /&gt;
  RewriteCond %{REQUEST_URI} &amp;quot;^/~?[-_.a-zA-Z0-9/]*$&amp;quot;&lt;br /&gt;
  # /PROCACHE -------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
  # 17. If the request is for a file or directory that physically exists on the server,&lt;br /&gt;
  # then don&amp;#039;t give control to ProcessWire, and instead load the file&lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
&lt;br /&gt;
  RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
  RewriteCond %{REQUEST_FILENAME} !-d&lt;br /&gt;
  RewriteCond %{REQUEST_FILENAME} !(favicon\.ico|robots\.txt)&lt;br /&gt;
&lt;br /&gt;
  # -----------------------------------------------------------------------------------------------&lt;br /&gt;
  # 18. OPTIONAL: Prevent ProcessWire from attempting to serve images or anything in /site/assets/. &lt;br /&gt;
  # Both of these lines are optional, but can help to reduce server load. However, they&lt;br /&gt;
  # are not compatible with the $config-&amp;gt;pagefileSecure option (if enabled) and they &lt;br /&gt;
  # may produce an Apache 404 rather than your regular 404. You may uncomment the two lines&lt;br /&gt;
  # below if you don&amp;#039;t need to use the $config-&amp;gt;pagefileSecure option. After uncommenting, test&lt;br /&gt;
  # a URL like domain.com/site/assets/files/test.jpg to make sure you are getting a 404 and not&lt;br /&gt;
  # your homepage. If getting your homepage, then either: do not use this option, or comment out &lt;br /&gt;
  # section #2 above that makes ProcessWire the 404 handler. &lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
&lt;br /&gt;
  # RewriteCond %{REQUEST_FILENAME} !\.(jpg|jpeg|gif|png|ico)$ [NC]&lt;br /&gt;
  # RewriteCond %{REQUEST_FILENAME} !(^|/)site/assets/&lt;br /&gt;
&lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
  # 19. Pass control to ProcessWire if all the above directives allow us to this point.&lt;br /&gt;
  # For regular VirtualHosts (most installs)&lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
  RewriteRule ^(.*)$ index.php?it=$1 [L,QSA]&lt;br /&gt;
&lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
  # 20. If using VirtualDocumentRoot (500 NOTE): comment out the one above and use this one instead&lt;br /&gt;
  # ----------------------------------------------------------------------------------------------- &lt;br /&gt;
  # RewriteRule ^(.*)$ /index.php?it=$1 [L,QSA]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#################################################################################################&lt;br /&gt;
# END PROCESSWIRE HTACCESS DIRECTIVES&lt;br /&gt;
#################################################################################################&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Htaccess&amp;diff=25392</id>
		<title>Htaccess</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Htaccess&amp;diff=25392"/>
		<updated>2021-08-23T12:14:49Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: /* Common Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Anwendung von .htaccess - Dateien ==&lt;br /&gt;
=== Weiterführende Links: ===&lt;br /&gt;
https://jweiland.net/know-how/internet/htaccess-konfigurieren.html#c2756&lt;br /&gt;
&lt;br /&gt;
http://httpd.apache.org/docs/1.3/howto/htaccess.html&lt;br /&gt;
&lt;br /&gt;
von: http://www.uni-duesseldorf.de/Service/Webmaster/htaccess.php3 Juli 2006&lt;br /&gt;
&lt;br /&gt;
Referenz: Apache Manual: http://www.uni-duesseldorf.de/apache-manual/&lt;br /&gt;
&lt;br /&gt;
[[Apache Mod Rewrite Syntax]]&lt;br /&gt;
&lt;br /&gt;
=== Wozu braucht man das ?===&lt;br /&gt;
An wen ein HTTP-Server Dokumente herausgibt, welche spezielle Verarbeitung er u.U. bei einer spezifischen Anforderung (einem request) durchführt - all das wird zunächst durch eine von der Server-Software abhängigen Konfiguration bestimmt, die ein Administrator - ein Webmaster - eingerichtet hat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oft ist es aber wünschenswert, daß einzelne Verantwortliche für eine Dokumentenhierarchie auf dem Web-Server selbst ohne Intervention des Webmasters Setzungen vornehmen können, daß z.B. auf einzelne Dokumente oder alle in einem bestimmten Verzeichnis nur ein Zugriff aus bestimmten Domains oder mit verifiziertem Usernamen möglich ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beim Apache-HTTP-Server wie seinem Vorgänger, dem NCSA-httpd, gibt es diese Möglichkeiten durch die Einrichtung von .htaccess-Dateien in dem jeweiligen Verzeichnis. In der folgenden Darstellung wird als Referenz jeweils ein Verweis auf den entsprechenden Abschnitt in der lokale Kopie der Apache-Dokumentation für die Version 1.2 gegeben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Achtung:&amp;#039;&amp;#039;&amp;#039; In der Server-Konfiguration kann ein anderer Name als .htaccess vereinbart sein (AccesFileName-Direkt ive).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Zweiter Hinweis:&amp;#039;&amp;#039;&amp;#039; Die Datei muß für den HTTP-Server lesbar sein, z.B. dadurch erreicht, daß sie öffentlich lesbar ist:&lt;br /&gt;
&lt;br /&gt;
 chmod 644 .htaccess &lt;br /&gt;
&lt;br /&gt;
=== Zugriffsbeschränkung auf eine Domain === &lt;br /&gt;
==== für alle Dateien in einem Verzeichnis ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;.htaccess&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 order deny,allow&lt;br /&gt;
 deny  from all&lt;br /&gt;
 allow from .uni-duesseldorf.de 134.99 &lt;br /&gt;
&lt;br /&gt;
Alle Dateien in dem Verzeichnis werden nur an Clients ausgeliefert, die eine IP-Adresse beginnend mit 134.99 oder einen Hostnamen endend mit uni-duesseldorf.de besitzen; anderenfalls erfolgt eine Fehlermeldung des Servers (403 Forbidden).&lt;br /&gt;
&lt;br /&gt;
Natürlich genügt in vielen Fällen eine der Alternativen. Beachten Sie dabei die Unterschiede:&lt;br /&gt;
&lt;br /&gt;
* Die Angabe des Domain-Namens allein schließt - bewußt oder nicht - den Zugriff von PC&amp;#039;s aus, die nicht im Domain Name System (DNS) registriert sind.&lt;br /&gt;
* Die Angabe des IP-Subnetzes allein kann andere ausschließen, die organisatorisch zur gleichen Domain gehören, technisch aber in einem anderen Subnetz hängen. &lt;br /&gt;
&lt;br /&gt;
Wie lässt sich diese Zugriffsbeschränkung testen? Normalerweise benötigt man dazu einen Internet-Zugang über einen anderen Provider (T-Online, AOL, Compuserve etc.). Oder man benutzt einen Browser auf dem Server selbst z.B. in folgender Weise:&lt;br /&gt;
&lt;br /&gt;
 lynx http://localhost/Service/Webmaster/htaccess.phtml &lt;br /&gt;
&lt;br /&gt;
Der Zugriff erfolgt dann über das Loopback-Interface mit der IP-Adresse 127.0.0.1.&lt;br /&gt;
&lt;br /&gt;
Referenz: order, deny, allow. &lt;br /&gt;
&lt;br /&gt;
==== für einzelne Dateien ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;.htaccess&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Files huh*.html&amp;gt;&lt;br /&gt;
 order deny,allow&lt;br /&gt;
 deny  from all&lt;br /&gt;
 allow from .uni-duesseldorf.de 134.99&lt;br /&gt;
 &amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Zugriffsbeschränkung wie oben gilt jetzt nur für die Dateien, deren Namen auf das hinter Files angegebene Muster passen. Es kann ein einzelner Name angegeben werden oder ein Muster mit den Wildcard-Zeichen ? für ein beliebiges einzelnes Zeichen oder * für eine beliebige Folge von Zeichen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Schließlich sind auch feinere Muster über reguläre Ausdrücke möglich. Die Syntax der Files-Direktive dafür ist:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Files ~ &amp;quot;regexp&amp;quot;&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Referenz: &amp;lt;Files&amp;gt;, order, deny, allow.&lt;br /&gt;
&lt;br /&gt;
=== Zugriffsbeschränkung über Passwort ===&lt;br /&gt;
==== für ein Verzeichnis ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;.htaccess&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 AuthType Basic&lt;br /&gt;
 AuthName MeyersLeute&lt;br /&gt;
 AuthUserFile /home/meyer/passwd&lt;br /&gt;
 require valid-user&lt;br /&gt;
&lt;br /&gt;
Dokumente in einem Verzeichnis mit dieser .htaccess-Datei (oder einem Unterverzeichnis) können erst nach Eingabe eines gültigen Benutzernamen und Passwortes gelesen werden. Der Wert hinter AuthName wird vom Browser in der Dialog-Box für die Passwortabfrage angezeigt und dient gleichzeitig dazu, andere Dokumente mit dem gleichen Schutz zu erkennen und einmal eingelesene Werte für Username und Password ohne erneute Abfrage unmittelbar zu verwenden.&lt;br /&gt;
&lt;br /&gt;
Hinter AuthUserFile steht der Pfad der Passwortdatei, die die Benutzernamen und (verschlüsselten) Passwörter enthält. Sie sieht etwa so aus:&lt;br /&gt;
&lt;br /&gt;
 /home/meyer/passwd&lt;br /&gt;
&lt;br /&gt;
 meyer:xm.kPd4VJc3Fo&lt;br /&gt;
 mueller:eJFQCL8GftDXI&lt;br /&gt;
&lt;br /&gt;
Auch die Passwortdatei muß für den HTTP-Server lesbar sein. Gerade deshalb sollte sie niemals in demselben Bereich liegen wie die vom Server bedienten Dokumente, da sonst zumindest die gültigen Benutzernamen lesbar wären. (Aus diesem Grund müssen Sie aber u.U. daran denken, auch das entsprechende Verzeichnis - wie /home/meyer im Beispiel - für den HTTP-Server zumindest suchbar zu setzen, also etwa:&lt;br /&gt;
&lt;br /&gt;
    chmod 711 /home/meyer &lt;br /&gt;
&lt;br /&gt;
Angelegt und gepflegt werden kann die Passwortdatei mit dem Programm htpasswd:&lt;br /&gt;
&lt;br /&gt;
    htpasswd -c /home/meyer/passwd meyer&lt;br /&gt;
    htpasswd /home/meyer/passwd mueller &lt;br /&gt;
&lt;br /&gt;
Referenz: AuthType, AuthName, AuthUserFile, require.&lt;br /&gt;
&lt;br /&gt;
==== für einzelne Dateien ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;.htaccess&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 AuthType Basic&lt;br /&gt;
 AuthName MeyersLeute&lt;br /&gt;
 AuthUserFile /home/meyer/passwd&lt;br /&gt;
 &amp;lt;Files Huh*.html&amp;gt;&lt;br /&gt;
 require user meyer mueller&lt;br /&gt;
 &amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Kombination von 2. und 3. - Passwortschutz für einzelne Dateien in dem aktuellen Verzeichnis. Beim require wird hier noch eine andere Alternative gezeigt: die Aufzählung einzelner Benutzernamen aus der Passwortdatei. Wenn neue Benutzer in der Passwortdatei ergänzt werden, haben diese noch keinen Zugriff auf die so geschützten Seiten.&lt;br /&gt;
&lt;br /&gt;
Wenn die gleiche Liste von Benutzern an mehreren Stellen verwendet werden soll, ist die Definition der Liste über eine Gruppendatei empfehlenswert. Für diese dritte Alternative bzgl. der require-Direktive sind fogende Änderungen notwendig:&lt;br /&gt;
&lt;br /&gt;
1. In der .htaccess-Datei wird eine Gruppendatei angegeben:&lt;br /&gt;
 AuthGrouprFile /home/meyer/groups&lt;br /&gt;
Für den Ort der Ablage dieser Datei gelten dieselben Erwägungen wie für die Passwortdatei oben.&lt;br /&gt;
2. In der require-Direktive wird jetzt auf eine Gruppendefinition in der Gruppendatei Bezug genommen:&lt;br /&gt;
 require group meyers&lt;br /&gt;
3. Die Gruppendatei ist eine einfache Textdatei mit je einer Gruppendefinition pro Zeile in folgender Form: &lt;br /&gt;
&lt;br /&gt;
 /home/meyer/groups&lt;br /&gt;
 meyers: meyer mueller&lt;br /&gt;
&lt;br /&gt;
Referenz: AuthType, AuthName, AuthUserFile, AuthGroupFile, &amp;lt;Files&amp;gt;, require. &lt;br /&gt;
&lt;br /&gt;
===Spezielle Optionen===&lt;br /&gt;
==== automatischer Index (Directory Listing)====&lt;br /&gt;
ausführliche Infos hier: [[htaccess - Directory Listing]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;.htaccess&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Options +Indexes&lt;br /&gt;
&lt;br /&gt;
Mittels der Options-Direktive können - so von der globalen Server-Konfiguration her erlaubt - Voreinstellungen für Verarbeitungsoptionen für das aktuelle Verzeichnis und Unterverzeichnisse überschrieben werden.&lt;br /&gt;
&lt;br /&gt;
Die gezeigte Variante weist den Server an, bei der Referenz auf das aktuelle Verzeichnis oder ein Unterverzeichnis ein Directory-Listing als Index-Datei automatisch zu generieren. Er macht dies allerdings nur, wenn nicht schon eine Index-Datei (mit vordefiniertem Namen wie index.html) vorhanden ist. Ggf. kann man die hier bekannten Namen mit der Direktive&lt;br /&gt;
&lt;br /&gt;
    DirectoryIndex Welcome.html &lt;br /&gt;
&lt;br /&gt;
einschränken.&lt;br /&gt;
&lt;br /&gt;
Referenz: Options, DirectoryIndex.&lt;br /&gt;
&lt;br /&gt;
==== Automatischer Index mit User Auth ====&lt;br /&gt;
(Quelle Weiland s.o.)&lt;br /&gt;
Directory Listing&lt;br /&gt;
&lt;br /&gt;
Soll über einer geschützen Unterseite (z.B. fileadmin/downloads) des Internetauftritts ein Directory Listing realisiert werden, dann sollte die .htaccess wie folgt eingestellt werden:&lt;br /&gt;
&lt;br /&gt;
 AuthType Basic&lt;br /&gt;
 AuthName &amp;quot;system - &amp;quot;&lt;br /&gt;
 Options +Indexes&lt;br /&gt;
 IndexOptions +FancyIndexing&lt;br /&gt;
 AuthUserFile /*ihr_serverpfad/projektpfad/filadmin/downloads/.htpasswd&lt;br /&gt;
 AuthGroupFile /dev/null&lt;br /&gt;
 require valid-user&lt;br /&gt;
&lt;br /&gt;
* ihr_serverpfad  finden Sie in Ihrem Kundenmenu unter Technische Infos oder durch Eingabe des Befehls $PWD in der Shell.&lt;br /&gt;
&lt;br /&gt;
Den User mit verschlüseltem Passwort in dem Fall in der .htpasswd vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
Die Unterseite mit dem Directory Listing muss von der TYPO3 index.php ausgeschlossen werden und erreichen Sie über die .htaccess in dem Projektverzeichnis mit folgenden Angaben nach der RewriteEngine On:&lt;br /&gt;
&lt;br /&gt;
 RewriteRule ^fileadmin/downloads/$ - [L]&lt;br /&gt;
 RewriteRule ^fileadmin/downloads/.*$ - [L]&lt;br /&gt;
&lt;br /&gt;
==== Startdatei festlegen ====&lt;br /&gt;
Mit dem vorigen Beispiel kann man auch festlegen welche Dateien beim Aufruf eines Verzeichnisses (oder der Webadresse) an den Browser geliefert werden sollen. Manchmal hat man den Fall das die Startdatei eines CMS index.php heißt und bei Wartungsarbeiten die Datei index.html aufgerufen werden soll.&lt;br /&gt;
&lt;br /&gt;
 DirectoryIndex index.html index.php start.html&lt;br /&gt;
&lt;br /&gt;
weist den Apache an falls vorhanden die Datei index.html aufzurufen, wenn nicht die index.php und so weiter.&lt;br /&gt;
&lt;br /&gt;
Bei Wartungsarbeiten kann man nun einfach eine index.html aufspielen die bei Aufruf der Domain angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
==== PHP - Werte setzen ====&lt;br /&gt;
Wenn der Server das erlaubt kann man es folgendermaßen machen:&lt;br /&gt;
===== PHP Memory Limit =====&lt;br /&gt;
 php_value memory_limit 256M&lt;br /&gt;
===== PHP Execution Time =====&lt;br /&gt;
 php_value max_execution_time 240&lt;br /&gt;
&lt;br /&gt;
==== Error Reporting ====&lt;br /&gt;
===== Produktiv Betrieb =====&lt;br /&gt;
(Fehler unterdrückt aber protokolliert)&lt;br /&gt;
&lt;br /&gt;
 php_value error_reporting 2047&lt;br /&gt;
 php_value display_errors 0&lt;br /&gt;
 php_value log_errors 1&lt;br /&gt;
 php_value error_log /eigener/pfad/fehler.log&lt;br /&gt;
&lt;br /&gt;
===== Entwicklung =====&lt;br /&gt;
hier sollte display_errors auf 1 stehen&lt;br /&gt;
&lt;br /&gt;
siehe auch [[PHP - Error Reporting / Fehlerbehandlung]]&lt;br /&gt;
&lt;br /&gt;
siehe auch [[TYPO3 - Error Reporting / Fehlerbehandlung]]&lt;br /&gt;
&lt;br /&gt;
==== Skripte sperren ====&lt;br /&gt;
z.B. bei Überlastung durch ein Skript (hier im Beispiel meineDomain.de/ajax/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteCond %{REQUEST_URI}   (.*)ajax(.*)   [NC]&lt;br /&gt;
RewriteRule ^(.*)  - [F]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Browser Caching ==&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_expires.c&amp;gt;&lt;br /&gt;
ExpiresActive On&lt;br /&gt;
ExpiresByType text/html &amp;quot;access plus 500 seconds&amp;quot;&lt;br /&gt;
ExpiresByType image/gif &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType image/ico &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType image/jpeg &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType image/jpg &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType image/png &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType text/css &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType text/javascript &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType application/x-javascript &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType application/javascript &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Zugriff auf Ordner ==&lt;br /&gt;
=== Sperren ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# This file restricts access to the fileadmin/user_upload/_import_export_ directory. It is&lt;br /&gt;
# meant to protect temporary files which could contain sensible&lt;br /&gt;
# information. Please do not touch.&lt;br /&gt;
&lt;br /&gt;
# Apache &amp;lt; 2.3&lt;br /&gt;
&amp;lt;IfModule !mod_authz_core.c&amp;gt;&lt;br /&gt;
	Order allow,deny&lt;br /&gt;
	Deny from all&lt;br /&gt;
	Satisfy All&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Apache ≥ 2.3&lt;br /&gt;
&amp;lt;IfModule mod_authz_core.c&amp;gt;&lt;br /&gt;
	Require all denied&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weiterleitung mit .htaccess ==&lt;br /&gt;
=== Beispiele mit Fokus auf TYPO3 ===&lt;br /&gt;
Quelle  Weiland (s.o.)&lt;br /&gt;
====Weiterleitungen (Redirects)====&lt;br /&gt;
===== Common Cases =====&lt;br /&gt;
Einzelne Unterseiten weiterleiten&lt;br /&gt;
&lt;br /&gt;
Aufrufe einer Unterseite (z.B. a.html) auf eine andere Unterseite (z.B. b.html) innerhalb der selben Domain weiterleiten.&lt;br /&gt;
 Redirect 301 /a.html /b.html&lt;br /&gt;
&lt;br /&gt;
Ganzen Ordner / Verzeichnis weiterleiten&lt;br /&gt;
&lt;br /&gt;
Aufrufe eines Ordners (z.B. /a) auf einen anderen Ordner innerhalb der selben Domain (z.B. /b) weiterleiten. Die Weiterleitung wirkt sich auch auf alle Dateien innerhalb des Ordners /a aus, so wird z.B. der Aufruf von /a/test.html auf /b/test.html weitergeleitet.&lt;br /&gt;
 Redirect 301 /a /b&lt;br /&gt;
&lt;br /&gt;
Domain Weiterleitung: Ganze Domain umleiten&lt;br /&gt;
&lt;br /&gt;
Aufrufe einer Unterseite (URL) von Domain A auf die selbe Unterseite (URL) unter Domain B weiterleiten.&lt;br /&gt;
z.B. domain-a.de/test.html auf domain-b.de/test.html weiterleiten wobei dies nicht nur für test.html, sondern auch für alle weiteren Unterseiten gilt.&lt;br /&gt;
 Redirect 301 / http://www.domain-b.de/&lt;br /&gt;
&lt;br /&gt;
Alternative Lösung mittels RewriteCond / RewriteRule:&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{HTTP_HOST} domain-a.de$ [NC]&lt;br /&gt;
 RewriteRule ^(.*) http://www.domain-b.de/$1 [R=301,L]&lt;br /&gt;
&lt;br /&gt;
URLs ohne www. auf URLs mit www. weiterleiten&lt;br /&gt;
&lt;br /&gt;
Standard Domain definieren und Aufrufe einer URL ohne die Subdomain www. auf die entsprechende URL mit www. weiterleiten um z.B. doppelte Inhalte für Suchmaschinen zu vermeiden.&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^domain.de$ [NC]&lt;br /&gt;
 RewriteRule (.*) http://www.domain.de/$1 [R=301,L]&lt;br /&gt;
&lt;br /&gt;
Alle Unterseiten auf Startseite weiterleiten&lt;br /&gt;
&lt;br /&gt;
Alle Aufrufe auf Unterseiten einer Domain mit Ausnahme der index.html, der Style.css sowie aller Dateien im Ordner /img/ auf die Startseite weiterleiten.&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
 RewriteCond %{REQUEST_URI} !^/(index\.html|style\.css)?$ [NC]&lt;br /&gt;
 RewriteCond %{REQUEST_URI} !^/img(/|$) [NC]&lt;br /&gt;
 RewriteRule ^.*$ /index.html [L,R=301]&lt;br /&gt;
URL mit Parameter weiterleiten&lt;br /&gt;
&lt;br /&gt;
Aufrufe von URLs welche einen bestimmten Parameter (z.B. test) enthalten, unabhängig von dessen Wert, auf ein Verzeichnis (z.B. /verzeichnis/) oder eine Unterseite weiterleiten.&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{QUERY_STRING} ^test=(.*)$&lt;br /&gt;
 RewriteRule ^(.*)$ /verzeichnis/? [R=301,L]&lt;br /&gt;
&lt;br /&gt;
URLs mit einem bestimmten Parameterwert weiterleiten (In diesem Fall Wert &amp;quot;test&amp;quot; für den Parameter &amp;quot;s&amp;quot; auf das Verzeichnis &amp;quot;test&amp;quot; weiterleiten).&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{QUERY_STRING} ^s=test$&lt;br /&gt;
 RewriteRule ^(.*)$ /test/? [R=301,L]&lt;br /&gt;
Parameter aus URL entfernen&lt;br /&gt;
&lt;br /&gt;
Aufrufe von URLs welche einen bestimmten Parameter (z.B. www.domain.de/verzeichnis/?test=...) enthalten, unabhängig von dessen Wert, auf die selbe URL ohne Parameter am Ende (z.B. www.domain.de/verzeichnis/) weiterleiten bzw. den den Parameter aus der URL entfernen. Falls die Regel nur für einen bestimmten Parameter Wert gelten soll, kann der Code analog zum vorherigen Beispiel modifiziert werden.&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{QUERY_STRING} test=(.*)$&lt;br /&gt;
 RewriteRule ^(.*)$ /$1? [R=301,L]&lt;br /&gt;
&lt;br /&gt;
===== Allgemeines =====&lt;br /&gt;
&lt;br /&gt;
Die Weiterleitung von Domains und Anfragen zu einzelnen Webseiten ist eine der Hauptanwendungen der .htaccess Datei. Das notwendige Apache Modul mod_rewrite ist in unseren Hosting Tarifen vorhanden. &lt;br /&gt;
&lt;br /&gt;
Die Weiterleitung muss jedoch in der .htaccess Datei zunächst mit folgendem Eintrag aktiviert werden (in den weiteren Beispielen haben wir diese Zeile weggelassen):&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
301 oder 302 Weiterleitung?&lt;br /&gt;
&lt;br /&gt;
Der Weiterleitung (Redirect) sollte man noch einen Statuscode mitgeben: 301 oder 302. Worin liegt der Unterschied? &lt;br /&gt;
&lt;br /&gt;
 301: die Weiterleitung ist dauerhaft, z.B. weil die Navigationsstruktur einer Webseite umgestellt wurde&lt;br /&gt;
&lt;br /&gt;
 302: die Weiterleitung erfolgt nur vorübergehend, anschließend gilt wieder die bisherige Adresse&lt;br /&gt;
&lt;br /&gt;
Am Ende der RewriteRule Zeile wird der Code für die Weiterleitung (Redirect) in eckigen Klammern angegeben. Mit dem zusätzlichen Parameter L (Letzter, Last) kann man festlegen, dass die weiteren Anweisungen in der .htaccess Datei ignoriert werden sollen. Hierzu ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
 RewriteRule ^neues\.html$ /aktuelles.html [R=301,L]&lt;br /&gt;
Damit wird die Seite domain.tld/neues.html dauerhaft auf domain.tlld/aktuelles.htmlweitergeleitet.&lt;br /&gt;
&lt;br /&gt;
Die Schreibweise der Rewrite Regeln basiert dabei auf &amp;quot;Regulären Ausdrücken&amp;quot; (Regular Expressions, regex). &lt;br /&gt;
&lt;br /&gt;
Mit den Zeichen ^ und $ wird Anfang und Ende der umzuleitenden Seite gekennzeichnet. Der Punkt . steht in regulären Ausdrücken für ein beliebiges Zeichen, wenn wir wirklich einen Punkt meinen, dann wird dies mit einem Backslash \ gekennzeichnet (\ bedeutet also: exakt das nächste Zeichen).&lt;br /&gt;
&lt;br /&gt;
====Besonderheit: Anker auf einer Seite====&lt;br /&gt;
&lt;br /&gt;
Auf einer Webseite können &amp;quot;Anker&amp;quot; als Sprungmarke gesetzt sein. Beim Aufruf wird im Browser nicht auf den Anfang der Seite sondern direkt zum Ankerpunkt gesprungen. Der Anker wird durch ein Hash-Zeichen # in der URL gefolgt vom Namen der Sprungmarke gekennzeichnet. Beispiel für eine Adresse mit Anker:&lt;br /&gt;
&lt;br /&gt;
 domain.tld/aktuelles.html#artikel25&lt;br /&gt;
Soll per .htaccess Weiterleitung direkt auf eine Sprungmarke verwiesen werden, muss der zusätzliche Parameter NE (No Encoding) in eckigen Klammern angegeben werden:&lt;br /&gt;
&lt;br /&gt;
 RewriteRule ^neues\.html$ /aktuelles.html#artikel25 [R=301,L,NE]&lt;br /&gt;
Domain auf verschlüsselte Verbindung umleiten&lt;br /&gt;
&lt;br /&gt;
Sollen alle Seiten einer Domain ausschließlich über eine SSL-Verbindung aufgerufen werden, so kann dies über einen Eintrag in der .htaccess Datei im Startverzeichnis der Domain eingerichtet werden:&lt;br /&gt;
&lt;br /&gt;
 RewriteCond %{SERVER_PORT} !^443$&lt;br /&gt;
 RewriteRule (.*) https://%{HTTP_HOST}/$1 [L]&lt;br /&gt;
In der ersten Zeile wird die Funktion zum Umschreiben von URLs im Apache Webserver aktiviert. In der zweiten Zeile wird die Bedingung definiert &amp;quot;Wenn der Aufruf nicht auf Port 443 erfolgt&amp;quot; (Port 443 wird für SSL-Verschlüsselung verwendet, Port 80 für unverschlüsselte Aufrufe). Zeile 3 ist die Regel für das Umschreiben der URL. Wenn die Bedingung aus Zeile 2 zutrifft, werden die Aufrufe einer beliebigen Seite auf die gleiche Domain (${HTTP_HOST}) jedoch über das https:// Protokoll umgeleitet. Mit /$1 wird die ursprüngliche URL (z.B. impressum.html) an den Domainnamen angefügt. Mit dem Parameter [L] wird angegeben, dass das Umschreiben der URLs hier enden soll, weitere Zeilen in der .htaccess Datei werden also ignoriert.&lt;br /&gt;
&lt;br /&gt;
====Domain name-of-domain.net nach name-der-domain.de umleiten====&lt;br /&gt;
&lt;br /&gt;
Oftmals werden für ein Projekt mehrere Domains registriert, um verschiedene Schreibweisen abzudecken. Nach außen wird eine Hauptdomain kommunziert (Beispiel: name-der-domain.de als Hautpdomain, dazu name-of-domain.net als Zusatzdomains). &lt;br /&gt;
&lt;br /&gt;
Mit folgendem Eintrag in der .htaccess Datei werden alle Aufrufe für name-of-domain.net nach name-der-domain.de weitergeleitet:&lt;br /&gt;
&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^(www\.)?name-of-domain\.net$ [NC]&lt;br /&gt;
 RewriteRule ^(.*)$ http://www.name-der-domain.de/$1 [R=301,L]&lt;br /&gt;
Die Weiterleitung nach name-der-domain.de erfolgt dabei mit dem Statuscode 301 (permanent), so dass auch in Suchmaschinen auf Dauer nur diese erscheint. Dadurch werden Probleme mit &amp;quot;doppeltem Inhalt&amp;quot; (Duplicate Content) vermieden. Alle bei der ursprünglichen Domain übermittelten Parameter werden an die Zieldomain weitergegeben.&lt;br /&gt;
&lt;br /&gt;
====Einer Domain immer www. voranstellen====&lt;br /&gt;
&lt;br /&gt;
Mit folgendem Eintrag in der .htaccess Datei werden alle Aufrufe für eine Domain ohne www auf die Variante mit www weitergeleitet:&lt;br /&gt;
&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^name-der-domain\.de$ [NC]&lt;br /&gt;
 RewriteRule ^(.*)$ http://www.name-der-domain.de/$1 [R=301,L]&lt;br /&gt;
Die Weiterleitung nach www.name-der-domain.de erfolgt dabei mit dem Statuscode 301 (permanent), so dass auch in Suchmaschinen auf Dauer nur diese erscheint.&lt;br /&gt;
&lt;br /&gt;
====Domain auf eine Seite leiten====&lt;br /&gt;
&lt;br /&gt;
Bestimmte Domains oder Subdomains sollen entweder mit oder ohne www auf eine bestimmte Unterseite weitergeleitet werden.&lt;br /&gt;
&lt;br /&gt;
Dazu fügen Sie folgende Zeilen in Ihre .htaccess ein:&lt;br /&gt;
&lt;br /&gt;
 #Ohne realurl: &lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^(www\.)?name-der-domain\.de &lt;br /&gt;
 RewriteRule ^$ /index.php?id=85 &lt;br /&gt;
&lt;br /&gt;
 #oder realurl/simulatestatic mit html Suffix: &lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^(www\.)?name-der-domain\.de &lt;br /&gt;
 RewriteRule ^$ /unterseite.html &lt;br /&gt;
&lt;br /&gt;
 #oder realurl ohne html Suffix: &lt;br /&gt;
&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^(www\.)?name-der-domain\.de &lt;br /&gt;
 RewriteRule ^$ /unterseite/ &lt;br /&gt;
&lt;br /&gt;
====Weiterleitung auf eine andere Domain zu einer Unterseite====&lt;br /&gt;
&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^(www\.)?name-of-domain\.net [NC]&lt;br /&gt;
 RewriteRule ^(.*)$ http://www.name-der-domain.de/unterseite.hmtl [R=301,L] &lt;br /&gt;
 Redirect mit ? in der URL&lt;br /&gt;
&lt;br /&gt;
http://www.domainname.de/index.php?id=7&lt;br /&gt;
soll nach&lt;br /&gt;
&lt;br /&gt;
http://www.domainname.de/impressum.html&lt;br /&gt;
umgeleitet werden. Das Problem ist das ? in der alten URL und muss per QUERY_STRING in der Condition abgefragt werden. &lt;br /&gt;
Lösung:&lt;br /&gt;
&lt;br /&gt;
 RewriteCond %{QUERY_STRING} ^id=7$&lt;br /&gt;
 RewriteRule ^.*$ http://www.domainname.de/impressum.html? [L,R=301]&lt;br /&gt;
Wichtig ist auch der Browser-Cache. Der sollte unbedingt geleert werden, denn wenn ein Aufruf noch im Cache drin ist kann dadurch u.U. immer auf die falsche Seite leiten.&lt;br /&gt;
&lt;br /&gt;
So verhindert man, dass alte durch einen Umzug oder Neuprogrammierung nicht mehr vorhandene URLs in den Suchmaschinen zu einem schlechteren Ranking&lt;br /&gt;
&lt;br /&gt;
=== Weitere Beispiele (älter) ===&lt;br /&gt;
&lt;br /&gt;
Hinweis: eine Alternative hierfür ist eine PHP Weiterleitung ([[PHP - Tipps und Tricks]])&lt;br /&gt;
Quelle Dr.Web 28.12.2006&lt;br /&gt;
&lt;br /&gt;
Sie können sowohl Zugriffe auf bestimmte Dateien als auch auf Verzeichnisse bequem weiterleiten. Das klappt innerhalb der eigenen Domain, aber auch mit externen Verweisen.&lt;br /&gt;
&lt;br /&gt;
Die Datei .htaccess kann mit jedem Text-Editor bearbeitet werden. Eine Umleitung könnte so aussehen:&lt;br /&gt;
&lt;br /&gt;
 Redirect /beispielverzeichnis http://www.drweb.de&lt;br /&gt;
&lt;br /&gt;
Ruft jemand die URL http://www.drweb.de/beispielverzeichnis auf landet er ohne weiteren Zwischenstopp direkt auf der Startseite.&lt;br /&gt;
&lt;br /&gt;
Mit Einzeldateien klappt es auch:&lt;br /&gt;
&lt;br /&gt;
 Redirect /beispielseite.shtml http://www.drweb.de&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
 Redirect /beispielseite.shtml neueseite.shtml&lt;br /&gt;
&lt;br /&gt;
Wer mag, kann die gesamte Domain auf eine andere umleiten&lt;br /&gt;
&lt;br /&gt;
 Redirect / http://www.drweb.de/&lt;br /&gt;
&lt;br /&gt;
Nützlich während Bauarbeiten, bei Reparaturen oder wenn Dateien durch andere ersetzt wurden. Da die Umleitung serverseitig geschieht, spielt der Browser des Besuchers keine Rolle.&lt;br /&gt;
&lt;br /&gt;
Weitere nützliche Beispiele:&lt;br /&gt;
&lt;br /&gt;
Den Domainnamen ohne www auf den mit www umleiten. Es wird der Code 301 mitgegeben.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RewriteEngine on&lt;br /&gt;
RewriteCond %{HTTP_HOST} !^www\. [NC]&lt;br /&gt;
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Weiterleitung auf sichere Verbindung (https) ===&lt;br /&gt;
== Umleitung auf https ==&lt;br /&gt;
Sichere Seiten sind seid 2019 Standard und quasi Pflicht. Mit diesem Code kann man von http auf https weiterleiten und gibt einen 301 (Moved Permanently) Header mit.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_rewrite.c&amp;gt;&lt;br /&gt;
  # Enable URL rewriting&lt;br /&gt;
  RewriteEngine On&lt;br /&gt;
  # Redirect to https&lt;br /&gt;
  RewriteCond %{SERVER_PORT} !^443$&lt;br /&gt;
  RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Moved Permanently 301 Redirect ===&lt;br /&gt;
Quelle:http://www.fladi.de/2008/04/28/howto-webseiten-redirect-mit-301/ (25.7.2008)&lt;br /&gt;
&lt;br /&gt;
Was ist ein 301 redirect?&lt;br /&gt;
&lt;br /&gt;
301 redirect ist die wohl beste Möglichkeit das aktuelle Suchmaschinenranking beim Umzug einer Seite oder des gesamten Webauftritts zu behalten. Der Code “301″ steht für “moved permanently” (dauerhaft verschoben). Ein solches Redirect wird in der .htaccess Datei eintragen. Es trägt die Form (alles in einer Zeile):&lt;br /&gt;
&lt;br /&gt;
 redirect 301 pfad/alte/seite/datei.html http://www.domain.de/pfad/neue/seite/datei.html &lt;br /&gt;
&lt;br /&gt;
Beachte, kein “http://www” in das erste Statement zu schreiben. Es muss der komplette Pfad vom Root deines Webservers angegeben werden. Schauen wir uns die Zeile nun nochmal genauer an:&lt;br /&gt;
&lt;br /&gt;
    * “redirect 301″ - die eigentliche Anweisung für den Webserver&lt;br /&gt;
    * “/pfad/alte/seite/datei.html” - die Seite die umgeleitet werden soll&lt;br /&gt;
    * “http://www.domain.de/pfad/neue/seite.datei.html” - die komplette neue URL&lt;br /&gt;
&lt;br /&gt;
Wie reagiert nun ein Suchmaschinen-Spider auf eine solche Umleitung? Die .htaccess wird ja nicht vom Spider ausgelesen, sondern vom Webserver “ausgeführt”. Der Spider jedoch erkennt den Statuscode, den der Webserver liefert. Beim nächsten Update seiner Datenbank sollte die Suchmaschine nun die alte URL aus dem Index werfen und die neue aufnehmen. Häufig kommt es aber auch vor, dass alte und neue URL gemischt auftauchen. Auch leichte Änderungen im Pagerank können auftreten. Es dauert so ca. 6-8 Wochen bis sich die Änderungen an der Seite auch in den Suchergebnissen niederschlagen.&lt;br /&gt;
&lt;br /&gt;
Weitere Möglichkeiten von 301 redirect:&lt;br /&gt;
&lt;br /&gt;
   1. Um ALLE Dateien Deiner Domain mithilfe einer .htaccess umzuleiten kannst Du (auf einem Unix/Linux-Webserver) i.d.R. folgendes verwenden:&lt;br /&gt;
 redirect 301 ^(.*)$ http://www.domain.de&lt;br /&gt;
 redirectMatch permanent ^(.*)$ http://www.domain.de&lt;br /&gt;
&lt;br /&gt;
Um Deine alte Startseite (index.html) umzuleiten:&lt;br /&gt;
 redirect 301 /index.html http://www.domain.de/index.html&lt;br /&gt;
 redirect permanent /index.html http://www.domain.de/index.html&lt;br /&gt;
&lt;br /&gt;
2. Wenn Du http://domain.de auf http://www.domain.de umleiten möchtest und mod_rewrite auf dem Webserver verfügbar ist, erreichst Du dies durch folgende .htaccess:&lt;br /&gt;
&lt;br /&gt;
 Options +FollowSymLinks&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^domain\.de&lt;br /&gt;
 RewriteRule ^(.*)$ http://www.domain.de/$1 [R=permanent,L]&lt;br /&gt;
&lt;br /&gt;
 oder&lt;br /&gt;
&lt;br /&gt;
 Options +FollowSymLinks&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^domain\.de$ [NC]&lt;br /&gt;
 RewriteRule ^(.*)$ http://www.domain.de/$1 [R=301,L]&lt;br /&gt;
&lt;br /&gt;
3. Alle .html Dateien auf .php Dateien umzuleiten ist durch mod_rewrite auch kein großes Problem:&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
 RewriteRule (.*).html$ /$1.php&lt;br /&gt;
&lt;br /&gt;
4. Um ein Verzeichnis und alles darunter umzuleiten:&lt;br /&gt;
&lt;br /&gt;
 redirectMatch 301 ^/verzeichnis-alt/(.*) http://www.domain.de/verzeichnis-neu/&lt;br /&gt;
&lt;br /&gt;
=== Warum nicht per META-Tag redirect machen? ===&lt;br /&gt;
&lt;br /&gt;
Die Umleitung per META-Tag erfolgt direkt in der aufgerufenen Seite. Dort wird im HEAD-Teil&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;meta http-equiv=”refresh” content=”0; url=http://www.domain.de/”&amp;gt;&lt;br /&gt;
eingetragen. Hierbei bewirkt das “content=10″, dass der Browser nach 10 Sekunden die darauffolgende URL aufruft. Wenn man “content=0″ einträgt wird die Umleitung sofort ausgeführt. Ein paar alte Browser unterstützen diese Art der Umleitung nicht. Deshalb ist es besser noch zusätzlich den Link (neue Domain) mit anzugeben.&lt;br /&gt;
&lt;br /&gt;
Technisch gesehen liefert die angefragte Seite, wie auch die Seite auf die umgeleitet wird, einen Statuscode “200 OK” zurück. Es sind also zwei unabhängige Seiten. Dementsprechend versucht die Suchmaschinen auch beide Seiten zu indizieren. Hier genau liegt aber das Problem. Denn der Spider des Suchmaschinenbetreibers erkennt die Umleitung und wertet Deine Seite deshalb u.U. ab, da es sich um eine beliebte SPAM-Methode handelt. So könnte man 1000 Domains mit solchen Seiten und jeder Menge Keywords einrichten. Echte Besucher (kein Spider) werden umgeleitet auf die eigentliche Seite. Indiziert wird aber nicht nur die eigentliche Seite sondern auch die 1000 Domains mit Keywords, die meist gar nichts mit dem eingentlichen Inhalt zu tun haben.&lt;br /&gt;
&lt;br /&gt;
Beim 301 redirect wird hingegen nur die echte Zielseite in den Index aufgenommen und durch den Statuscode kann der Suchmaschinenbetreiber zusätzlich noch die veralteten Seite aus dem Index werfen. Dies ist also der beste Weg um alte Seiten auf neue umzuleiten und gleichzeitig wird auch der Page Rank mit übertragen.&lt;br /&gt;
&lt;br /&gt;
===Weiterleitung über IP===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Options +FollowSymlinks&lt;br /&gt;
RewriteEngine on&lt;br /&gt;
&lt;br /&gt;
#IP Bedingung&lt;br /&gt;
RewriteCond %{REMOTE_HOST} ^85\.13\.128\.137&lt;br /&gt;
&lt;br /&gt;
#Zielseite erlauben&lt;br /&gt;
RewriteCond %{REQUEST_URI} !/ip-remote\.php$&lt;br /&gt;
&lt;br /&gt;
#Umleiten&lt;br /&gt;
#RewriteRule ^/* http://demo.webmynet.de/ip-remote.php [R,NE,NC]&lt;br /&gt;
RewriteRule /(.*)$ /ip-remote.php [R=302,L]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Erlaubte Anweisungen in .htaccess-Dateien ==&lt;br /&gt;
&lt;br /&gt;
http://de.selfhtml.org/servercgi/server/htaccess.htm&lt;br /&gt;
&lt;br /&gt;
Auszug (Datum des Zugriffs: 10.9.2007): &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Die Anweisung AllowOverride kann nicht innerhalb einer .htaccess notiert werden, sondern wird ausschließlich vom Server-Administrator in der zentralen Konfigurationsdatei vorgegeben. Um den AllowOverride-Wert in Erfahrung zu bringen, benötigen Sie Einsicht in die Serverkonfiguration. Kontaktieren Sie dazu gegebenenfalls Ihren Webhosting-Provider. Dieser kann den Wert auch ändern, falls Sie bestimmte bisher nicht erlaubte Anweisungen verwenden möchten. Im einzelnen gibt es dafür folgende mögliche Werte:&lt;br /&gt;
&lt;br /&gt;
    * Mit AllowOverride None wird der Webserver angewiesen, .htaccess-Dateien zu ignorieren. Das ist im Übrigen die Voreinstellung.&lt;br /&gt;
    * Mit AllowOverride All wird festgelegt, dass in einer .htaccess-Datei (so gut wie) sämtliche zentrale Vorgaben überschrieben und damit abgeändert werden dürfen. Das kann bedeuten, dass Vorhaben, die eigentlich verboten sind (beispielsweise die Ausführung von CGI-Scripts), mit Hilfe einer .htaccess-Datei erlaubt werden. Als Server-Administrator werden Sie diese Anweisung also nur sehr vorsichtig einsetzen.&lt;br /&gt;
    * Mit AllowOverride Options wird festgelegt, dass in einer .htaccess-Datei nach unten Anweisungen zur Steuerung spezieller Verzeichniseigenschaften zulässig sind.&lt;br /&gt;
    * Mit AllowOverride Limit wird festgelegt, dass in einer .htaccess-Datei nach unten Zugriffe von bestimmten Hosts erlaubt oder untersagt werden können.&lt;br /&gt;
    * Mit AllowOverride Indexes wird festgelegt, dass in einer .htaccess-Datei nach unten Anweisungen zur Steuerung von Verzeichnisindizes zulässig sind.&lt;br /&gt;
    * Mit AllowOverride FileInfo wird festgelegt, dass in einer .htaccess-Datei Anweisungen zur Akzeptanz bestimmter Dokumenttypen zulässig sind - beispielsweie, um nach unten Individuelle Fehlermeldungen ausgeben zu können.&lt;br /&gt;
    * Mit AllowOverride AuthConfig wird festgelegt, dass in einer .htaccess-Datei Autorisierungsanweisungen stehen dürfen - das betrifft beispielsweise Regelungen zum nach unten Passwortschutz.&lt;br /&gt;
&lt;br /&gt;
Diese Werte können auch miteinander kombiniert werden. All ist der mächtigste Parameter, mit dem alles das zugelassen wird, was die anderen Parameter steuern.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Ändern muß natürlich der Server neu gestartet werden (bei Debian: apache restart)&lt;br /&gt;
&lt;br /&gt;
==IP Adressen sperren==&lt;br /&gt;
&lt;br /&gt;
Manchmal ist es notwendig, bestimmte IP Adressen vom Aufruf der Webseite auszusperren, z.B. bei einem Angriffsversuch auf die Webseite. Über folgenden Eintrag in der .htaccess Datei (z.B. vor dem Eintrag &amp;#039;RewriteEngine On&amp;#039;) im Startverzeichnis der Seite lassen sich unerwünschte Besucher abweisen:&lt;br /&gt;
&lt;br /&gt;
 order allow,deny &lt;br /&gt;
 deny from 192.168.2.17 &lt;br /&gt;
 deny from 10.10.20.63 &lt;br /&gt;
 allow from all&lt;br /&gt;
Bei mehreren IP Adressen wird jede in eine eigene Zeile eingetragen. Die Einstellung gilt auch für alle Unterverzeichnisse. Wenn jemand mit einer gesperrten Adresse versucht, die Seite aufzurufen, erhält er einen 403 Fehlercode.&lt;br /&gt;
&lt;br /&gt;
==HTML5 Videos / bestimmte Dateitypen zulassen ==&lt;br /&gt;
&lt;br /&gt;
Falls es in einzelnen Browsern zu Problemen beim Abspielen von per HTML5 eingebundenen Videos kommt, helfen eventuell folgende Zeilen in der .htaccess Datei im Projektverzeichnis:&lt;br /&gt;
&lt;br /&gt;
 AddType video/ogg .ogm &lt;br /&gt;
 AddType video/ogg .ogv &lt;br /&gt;
 AddType video/ogg .ogg &lt;br /&gt;
 AddType video/webm .webm &lt;br /&gt;
 AddType audio/webm .weba &lt;br /&gt;
 AddType video/mp4 .mp4 &lt;br /&gt;
 AddType video/x-m4v .m4v&lt;br /&gt;
&lt;br /&gt;
== htaccess für Typo3 ==&lt;br /&gt;
&lt;br /&gt;
http://www.typo3lexikon.de/server/htaccess.html (11/2014)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.htaccess für TYPO3&lt;br /&gt;
Ich möchte auf dieser Seite nicht erklären wie .htaccess-Dateien erstellt werden. Nein. Davon gibt es schon zu genüge Dokumentationen im Web:&lt;br /&gt;
&lt;br /&gt;
Allgemeines zu htaccess&lt;br /&gt;
&lt;br /&gt;
URLs manipulieren&lt;br /&gt;
&lt;br /&gt;
Reguläre Ausdrücke&lt;br /&gt;
&lt;br /&gt;
htaccess Beispiele&lt;br /&gt;
&lt;br /&gt;
Auf dieser Seite geht es mehr um das Zusammenspiel von TYPO3 und htaccess-Dateien gerade in Bezug unter der Verwendung von der Extension RealUrl. In den nächsten Zeilen werde ich Euch meine htaccess-Datei in Detail näher erklären:&lt;br /&gt;
&lt;br /&gt;
RewriteEngine&lt;br /&gt;
Mit RewriteEngine kannst Du das Modifizieren von URLs de- bzw. aktivieren. Erst wenn diese Option aktiviert ist, kannst du z.B. alle Anfragen, die an Deinen Server gesendet werden auf eine völlig andere Webseite umleiten.&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
Bestimmte Verzeichnisse nicht umschreiben&lt;br /&gt;
Wenn Ihr RealUrl installiert habt, dann erhaltet Ihr je nach Konfiguration URLs wie&lt;br /&gt;
&lt;br /&gt;
/meine-seite/kontakt/impressum.html&lt;br /&gt;
Dabei sind die vermeintlichen Ordner gar keine echten Ordner auf dem Server, sondern Informationen, die an die index.php weitergeleitet werden, um dann die gewünschte Seite aufrufen zu können. Was aber, wenn wir wirklich mal einen Ordner auf dem Server öffnen wollen? Dann darf dieser Name des Ordner NICHT an die index.php weitergeleitet werden. Um das zu erreichen verwende ich das Script aus der RealUrl-Dokumentation:&lt;br /&gt;
RewriteRule ^typo3$ - [L]&lt;br /&gt;
RewriteRule ^typo3/.*$ - [L]&lt;br /&gt;
RewriteRule ^uploads/.*$ - [L]&lt;br /&gt;
RewriteRule ^fileadmin/.*$ - [L]&lt;br /&gt;
RewriteRule ^typo3conf/.*$ - [L]&lt;br /&gt;
Hinweis&lt;br /&gt;
[L] bedeutet, dass nach dieser Umschreibung der URL keine weiteren Umschreibungen mehr ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Der Bindestrich (-) bedeutet, dass keine Umschreibung der URL stattfinden soll.&lt;br /&gt;
&lt;br /&gt;
Doppelter Content&lt;br /&gt;
Wer von Euch seine Seite schon mal mit www.seitwert.de bewertet hat, wird bestimmt schon mal über den Eintrag bzgl. doppelten Content/Inhalt gestoßen sein. So kommt es je nach Konfiguration vor, dass eine Seite wie sfroemken.de das Gleiche anzeigt wie www.sfroemken.de. Dieses &amp;quot;Problem&amp;quot; kann sich auch negativ auf die Position in den Suchergebnissen auswirken. Aber auch das lässt sich mit Hilfe der htaccess-Datei bereinigen:&lt;br /&gt;
&lt;br /&gt;
RewriteCond  %{HTTP_HOST} ^sfroemken\.de$ [NC]&lt;br /&gt;
RewriteRule ^(.*)$ www.sfroemken.de/$1 [R=301,L]&lt;br /&gt;
Erklärung&lt;br /&gt;
%{HTTP_HOST} kann in diesem Fall sfroemken.de oder aber auch www.sfroemken.de sein. Mit RewriteCond könnt Ihr nun überprüfen, ob der HTTP_HOST mit dem Wert sfroemken.de übereinstimmt. Dank [NC] soll die Groß- und Kleinschreibung bei diesem Vergleich nicht berücksichtigt werden.&lt;br /&gt;
&lt;br /&gt;
Wenn RewriteCond nun ein true zurück gibt, dann wird die Modifikation in RewriteRule ausgeführt. Alles was durch die Klammern markiert wurde, kann im zweiten Parameter mit $1 wiederverwendet werden. [R=301]: Das R steht für redirect und die 301 ist ein bestimmter Servercode, mit dem bestimmt wird, dass es sich bei dieser Weiterleitung um eine parmanente Weiterleitung handelt.&lt;br /&gt;
&lt;br /&gt;
So wird aus&lt;br /&gt;
&lt;br /&gt;
sfroemken.de/kontakt/index.php&lt;br /&gt;
ein&lt;br /&gt;
&lt;br /&gt;
www.sfroemken.de/kontakt/index.php&lt;br /&gt;
Subdomains&lt;br /&gt;
Bei Subdomains müssen wir das genau andersrum machen. Dort gibt es kein www. Da www.seitwert.de aber trotzdem überprüft, ob die Domain auch mit einem www davor erreichbar ist, müssen wir das folgendermaßen abfangen:&lt;br /&gt;
&lt;br /&gt;
RewriteCond  %{HTTP_HOST} ^www\.typo3\.sfroemken\.de$ [NC]&lt;br /&gt;
RewriteRule ^(.*)$ typo3.sfroemken.de/$1 [R=301,L]&lt;br /&gt;
Ordner&lt;br /&gt;
Leider haben sich viele Surfer daran gewöhnt Ordner auf einem Server ohne abschließendem Slash (/) anzugeben. Damit dieser Slash automatisch hinten dran gemacht wird, können wir folgendes Script verwenden:&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
RewriteRule (.*[^/])$ %{HTTP_HOST}/$1/ [L,R]&lt;br /&gt;
Erklärung&lt;br /&gt;
Die ersten beiden RewriteCond fragen ab, ob es sich bei der aufzurufenden URL nicht um eine Datei handelt und nicht um einen symbolischen Link. Wenn beides zutrifft, kann getrost ein zusätzlicher Slash hinten angefügt werden.&lt;br /&gt;
&lt;br /&gt;
Achtung&lt;br /&gt;
Wenn Ihr RealUrl so konfiguriert habt, dass Ihr URLs wie&lt;br /&gt;
&lt;br /&gt;
/kontakt/impressum.html&lt;br /&gt;
erhaltet, dann muss das Script noch etwas angepasst werden, dann ansonsten erhaltet Ihr eine URL wie diese hier:&lt;br /&gt;
&lt;br /&gt;
/kontakt/impressum.html/&lt;br /&gt;
Hier das angepasste Script:&lt;br /&gt;
&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} (^.htm$|^.html$)&lt;br /&gt;
RewriteRule (.*[^/])$ %{HTTP_HOST}/$1/ [L,R]&lt;br /&gt;
Heißt: Wenn die URL mit .htm oder .html endet, dann soll der zusätzliche Slash NICHT hinten dran gemacht werden.&lt;br /&gt;
&lt;br /&gt;
Index-Dateien in Ordnern&lt;br /&gt;
Je nach Projekt und Ordner kann es vorkommen, dass Du trotz RealUrl die Index-Dateien in bestimmten Ordnern ausführen möchtest:&lt;br /&gt;
&lt;br /&gt;
/fileadmin/projekt/download/index.php&lt;br /&gt;
Allerdings wird derzeit noch diese URL an die TYPO3-eigene index.php im Rootverzeichnis weitergeleitet. Um auch das zu unterbinden sind folgende 6 Zeilen vorgesehen:&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME}/index.html -f&lt;br /&gt;
RewriteRule / %{REQUEST_URI}/index.html [L]&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME}/index.htm -f&lt;br /&gt;
RewriteRule / %{REQUEST_URI}/index.htm [L]&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME}/index.php -f&lt;br /&gt;
RewriteRule / %{REQUEST_URI}/index.php [L]&lt;br /&gt;
URL-Modifikation für RealUrl&lt;br /&gt;
Dieses Script ist das wichtigste Script überhaupt für RealUrl. Hier wird nun endlich gesagt, dass alle Teile aus der URL an die TYPO3-eigene index.php weitergeleitet werden sollen zur Weiterverarbeitung durch RealUrl.&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-d&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
RewriteRule .* index.php&lt;br /&gt;
Hinweis&lt;br /&gt;
Je nach Art Eurer TYPO3-Installation könnte es sein, dass Eure index.php ein symbolischer Link ist. In diesem Fall müsst Ihr die letzt Zeile folgendermaßen ändern:&lt;br /&gt;
&lt;br /&gt;
RewriteRule .* /index.php&lt;br /&gt;
Scripmerger&lt;br /&gt;
Dieses Script benötigt Ihr nur, wenn Ihr die Extension scriptmerger verwenden wollt:&lt;br /&gt;
# Expires Header + Removal of ETag&lt;br /&gt;
&amp;lt;FilesMatch &amp;quot;\.(ico|png|gif|js|css|jpg|jpeg|swf)&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;IfModule mod_expires.c&amp;gt;&lt;br /&gt;
        ExpiresActive on&lt;br /&gt;
        ExpiresDefault &amp;quot;access plus 7 days&amp;quot;&lt;br /&gt;
        ExpiresDefault &amp;quot;access plus 2 months&amp;quot;&lt;br /&gt;
    &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# ETag&lt;br /&gt;
  FileETag MTime Size&lt;br /&gt;
  &amp;lt;IfModule mod_headers.c&amp;gt;&lt;br /&gt;
      FileETag none&lt;br /&gt;
      Header unset Last-Modified&lt;br /&gt;
    &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Compressed Content&lt;br /&gt;
&amp;lt;FilesMatch &amp;quot;\.gz\.(js|css)&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;IfModule mod_headers.c&amp;gt;&lt;br /&gt;
        Header set Content-Encoding gzip&lt;br /&gt;
    &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Shell Restriction auf all-inkl Server ===&lt;br /&gt;
Ab TYPO3 6 moniert das Install Tool das exec nicht augeführt werden darf. Es funktioniert wenn man die cgi Version von PHP nimmt. Das kann man per htaccess oder im KAS Backend einstellen.&lt;br /&gt;
&lt;br /&gt;
Beispiele.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AddHandler php55-cgi .php (sofern vom Server unterstützt)&lt;br /&gt;
AddHandler php54-cgi .php (sofern vom Server unterstützt)&lt;br /&gt;
AddHandler php53-cgi .php&lt;br /&gt;
AddHandler php52-cgi .php&lt;br /&gt;
AddHandler php5-cgi .php (Version entsprechend der PHP Apache-Modul Version)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHP Version auf Weiland Servern ===&lt;br /&gt;
 Über die PHP-Versionsauswahl im Kundenmenü können Sie die PHP-Version für eine Domain ändern. Folgende Anleitung erklärt, wie Sie die PHP Version für einzelne Verzeichnisse (und deren Unterverzeichnisse) ändern können.&lt;br /&gt;
&lt;br /&gt;
Das Verzeichnis kann dabei nur eine höhere PHP-Version erhalten, als die PHP-Version, die für die Domain im Kundenmenü eingestellt ist.&lt;br /&gt;
&lt;br /&gt;
Das bedeutet: Ist für die Domain PHP 5.6 im Kundenmenü eingestellt, können Sie für einzelne Verzeichnisse PHP 7.0 und höher einstellen, nicht jedoch niedrigere Versionen wie PHP 5.5. *&lt;br /&gt;
&lt;br /&gt;
Außerdem darf für die Domain kein Fast-CGI aktiviert sein.&lt;br /&gt;
&lt;br /&gt;
Um die PHP-Version für ein Verzeichnis zu ändern, legen Sie eine .htaccess-Datei mit folgender Anweisung in dem Verzeichnis ab. Die Anweisung ist abhängig von der PHP-Version, die Sie aktivieren möchten: &lt;br /&gt;
 AddType application/x-httpd-php72 .php&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Htaccess&amp;diff=25391</id>
		<title>Htaccess</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Htaccess&amp;diff=25391"/>
		<updated>2021-08-23T12:14:16Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: /* == Common Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Anwendung von .htaccess - Dateien ==&lt;br /&gt;
=== Weiterführende Links: ===&lt;br /&gt;
https://jweiland.net/know-how/internet/htaccess-konfigurieren.html#c2756&lt;br /&gt;
&lt;br /&gt;
http://httpd.apache.org/docs/1.3/howto/htaccess.html&lt;br /&gt;
&lt;br /&gt;
von: http://www.uni-duesseldorf.de/Service/Webmaster/htaccess.php3 Juli 2006&lt;br /&gt;
&lt;br /&gt;
Referenz: Apache Manual: http://www.uni-duesseldorf.de/apache-manual/&lt;br /&gt;
&lt;br /&gt;
[[Apache Mod Rewrite Syntax]]&lt;br /&gt;
&lt;br /&gt;
=== Wozu braucht man das ?===&lt;br /&gt;
An wen ein HTTP-Server Dokumente herausgibt, welche spezielle Verarbeitung er u.U. bei einer spezifischen Anforderung (einem request) durchführt - all das wird zunächst durch eine von der Server-Software abhängigen Konfiguration bestimmt, die ein Administrator - ein Webmaster - eingerichtet hat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oft ist es aber wünschenswert, daß einzelne Verantwortliche für eine Dokumentenhierarchie auf dem Web-Server selbst ohne Intervention des Webmasters Setzungen vornehmen können, daß z.B. auf einzelne Dokumente oder alle in einem bestimmten Verzeichnis nur ein Zugriff aus bestimmten Domains oder mit verifiziertem Usernamen möglich ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beim Apache-HTTP-Server wie seinem Vorgänger, dem NCSA-httpd, gibt es diese Möglichkeiten durch die Einrichtung von .htaccess-Dateien in dem jeweiligen Verzeichnis. In der folgenden Darstellung wird als Referenz jeweils ein Verweis auf den entsprechenden Abschnitt in der lokale Kopie der Apache-Dokumentation für die Version 1.2 gegeben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Achtung:&amp;#039;&amp;#039;&amp;#039; In der Server-Konfiguration kann ein anderer Name als .htaccess vereinbart sein (AccesFileName-Direkt ive).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Zweiter Hinweis:&amp;#039;&amp;#039;&amp;#039; Die Datei muß für den HTTP-Server lesbar sein, z.B. dadurch erreicht, daß sie öffentlich lesbar ist:&lt;br /&gt;
&lt;br /&gt;
 chmod 644 .htaccess &lt;br /&gt;
&lt;br /&gt;
=== Zugriffsbeschränkung auf eine Domain === &lt;br /&gt;
==== für alle Dateien in einem Verzeichnis ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;.htaccess&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 order deny,allow&lt;br /&gt;
 deny  from all&lt;br /&gt;
 allow from .uni-duesseldorf.de 134.99 &lt;br /&gt;
&lt;br /&gt;
Alle Dateien in dem Verzeichnis werden nur an Clients ausgeliefert, die eine IP-Adresse beginnend mit 134.99 oder einen Hostnamen endend mit uni-duesseldorf.de besitzen; anderenfalls erfolgt eine Fehlermeldung des Servers (403 Forbidden).&lt;br /&gt;
&lt;br /&gt;
Natürlich genügt in vielen Fällen eine der Alternativen. Beachten Sie dabei die Unterschiede:&lt;br /&gt;
&lt;br /&gt;
* Die Angabe des Domain-Namens allein schließt - bewußt oder nicht - den Zugriff von PC&amp;#039;s aus, die nicht im Domain Name System (DNS) registriert sind.&lt;br /&gt;
* Die Angabe des IP-Subnetzes allein kann andere ausschließen, die organisatorisch zur gleichen Domain gehören, technisch aber in einem anderen Subnetz hängen. &lt;br /&gt;
&lt;br /&gt;
Wie lässt sich diese Zugriffsbeschränkung testen? Normalerweise benötigt man dazu einen Internet-Zugang über einen anderen Provider (T-Online, AOL, Compuserve etc.). Oder man benutzt einen Browser auf dem Server selbst z.B. in folgender Weise:&lt;br /&gt;
&lt;br /&gt;
 lynx http://localhost/Service/Webmaster/htaccess.phtml &lt;br /&gt;
&lt;br /&gt;
Der Zugriff erfolgt dann über das Loopback-Interface mit der IP-Adresse 127.0.0.1.&lt;br /&gt;
&lt;br /&gt;
Referenz: order, deny, allow. &lt;br /&gt;
&lt;br /&gt;
==== für einzelne Dateien ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;.htaccess&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Files huh*.html&amp;gt;&lt;br /&gt;
 order deny,allow&lt;br /&gt;
 deny  from all&lt;br /&gt;
 allow from .uni-duesseldorf.de 134.99&lt;br /&gt;
 &amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Zugriffsbeschränkung wie oben gilt jetzt nur für die Dateien, deren Namen auf das hinter Files angegebene Muster passen. Es kann ein einzelner Name angegeben werden oder ein Muster mit den Wildcard-Zeichen ? für ein beliebiges einzelnes Zeichen oder * für eine beliebige Folge von Zeichen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Schließlich sind auch feinere Muster über reguläre Ausdrücke möglich. Die Syntax der Files-Direktive dafür ist:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Files ~ &amp;quot;regexp&amp;quot;&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Referenz: &amp;lt;Files&amp;gt;, order, deny, allow.&lt;br /&gt;
&lt;br /&gt;
=== Zugriffsbeschränkung über Passwort ===&lt;br /&gt;
==== für ein Verzeichnis ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;.htaccess&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 AuthType Basic&lt;br /&gt;
 AuthName MeyersLeute&lt;br /&gt;
 AuthUserFile /home/meyer/passwd&lt;br /&gt;
 require valid-user&lt;br /&gt;
&lt;br /&gt;
Dokumente in einem Verzeichnis mit dieser .htaccess-Datei (oder einem Unterverzeichnis) können erst nach Eingabe eines gültigen Benutzernamen und Passwortes gelesen werden. Der Wert hinter AuthName wird vom Browser in der Dialog-Box für die Passwortabfrage angezeigt und dient gleichzeitig dazu, andere Dokumente mit dem gleichen Schutz zu erkennen und einmal eingelesene Werte für Username und Password ohne erneute Abfrage unmittelbar zu verwenden.&lt;br /&gt;
&lt;br /&gt;
Hinter AuthUserFile steht der Pfad der Passwortdatei, die die Benutzernamen und (verschlüsselten) Passwörter enthält. Sie sieht etwa so aus:&lt;br /&gt;
&lt;br /&gt;
 /home/meyer/passwd&lt;br /&gt;
&lt;br /&gt;
 meyer:xm.kPd4VJc3Fo&lt;br /&gt;
 mueller:eJFQCL8GftDXI&lt;br /&gt;
&lt;br /&gt;
Auch die Passwortdatei muß für den HTTP-Server lesbar sein. Gerade deshalb sollte sie niemals in demselben Bereich liegen wie die vom Server bedienten Dokumente, da sonst zumindest die gültigen Benutzernamen lesbar wären. (Aus diesem Grund müssen Sie aber u.U. daran denken, auch das entsprechende Verzeichnis - wie /home/meyer im Beispiel - für den HTTP-Server zumindest suchbar zu setzen, also etwa:&lt;br /&gt;
&lt;br /&gt;
    chmod 711 /home/meyer &lt;br /&gt;
&lt;br /&gt;
Angelegt und gepflegt werden kann die Passwortdatei mit dem Programm htpasswd:&lt;br /&gt;
&lt;br /&gt;
    htpasswd -c /home/meyer/passwd meyer&lt;br /&gt;
    htpasswd /home/meyer/passwd mueller &lt;br /&gt;
&lt;br /&gt;
Referenz: AuthType, AuthName, AuthUserFile, require.&lt;br /&gt;
&lt;br /&gt;
==== für einzelne Dateien ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;.htaccess&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 AuthType Basic&lt;br /&gt;
 AuthName MeyersLeute&lt;br /&gt;
 AuthUserFile /home/meyer/passwd&lt;br /&gt;
 &amp;lt;Files Huh*.html&amp;gt;&lt;br /&gt;
 require user meyer mueller&lt;br /&gt;
 &amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Kombination von 2. und 3. - Passwortschutz für einzelne Dateien in dem aktuellen Verzeichnis. Beim require wird hier noch eine andere Alternative gezeigt: die Aufzählung einzelner Benutzernamen aus der Passwortdatei. Wenn neue Benutzer in der Passwortdatei ergänzt werden, haben diese noch keinen Zugriff auf die so geschützten Seiten.&lt;br /&gt;
&lt;br /&gt;
Wenn die gleiche Liste von Benutzern an mehreren Stellen verwendet werden soll, ist die Definition der Liste über eine Gruppendatei empfehlenswert. Für diese dritte Alternative bzgl. der require-Direktive sind fogende Änderungen notwendig:&lt;br /&gt;
&lt;br /&gt;
1. In der .htaccess-Datei wird eine Gruppendatei angegeben:&lt;br /&gt;
 AuthGrouprFile /home/meyer/groups&lt;br /&gt;
Für den Ort der Ablage dieser Datei gelten dieselben Erwägungen wie für die Passwortdatei oben.&lt;br /&gt;
2. In der require-Direktive wird jetzt auf eine Gruppendefinition in der Gruppendatei Bezug genommen:&lt;br /&gt;
 require group meyers&lt;br /&gt;
3. Die Gruppendatei ist eine einfache Textdatei mit je einer Gruppendefinition pro Zeile in folgender Form: &lt;br /&gt;
&lt;br /&gt;
 /home/meyer/groups&lt;br /&gt;
 meyers: meyer mueller&lt;br /&gt;
&lt;br /&gt;
Referenz: AuthType, AuthName, AuthUserFile, AuthGroupFile, &amp;lt;Files&amp;gt;, require. &lt;br /&gt;
&lt;br /&gt;
===Spezielle Optionen===&lt;br /&gt;
==== automatischer Index (Directory Listing)====&lt;br /&gt;
ausführliche Infos hier: [[htaccess - Directory Listing]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;.htaccess&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Options +Indexes&lt;br /&gt;
&lt;br /&gt;
Mittels der Options-Direktive können - so von der globalen Server-Konfiguration her erlaubt - Voreinstellungen für Verarbeitungsoptionen für das aktuelle Verzeichnis und Unterverzeichnisse überschrieben werden.&lt;br /&gt;
&lt;br /&gt;
Die gezeigte Variante weist den Server an, bei der Referenz auf das aktuelle Verzeichnis oder ein Unterverzeichnis ein Directory-Listing als Index-Datei automatisch zu generieren. Er macht dies allerdings nur, wenn nicht schon eine Index-Datei (mit vordefiniertem Namen wie index.html) vorhanden ist. Ggf. kann man die hier bekannten Namen mit der Direktive&lt;br /&gt;
&lt;br /&gt;
    DirectoryIndex Welcome.html &lt;br /&gt;
&lt;br /&gt;
einschränken.&lt;br /&gt;
&lt;br /&gt;
Referenz: Options, DirectoryIndex.&lt;br /&gt;
&lt;br /&gt;
==== Automatischer Index mit User Auth ====&lt;br /&gt;
(Quelle Weiland s.o.)&lt;br /&gt;
Directory Listing&lt;br /&gt;
&lt;br /&gt;
Soll über einer geschützen Unterseite (z.B. fileadmin/downloads) des Internetauftritts ein Directory Listing realisiert werden, dann sollte die .htaccess wie folgt eingestellt werden:&lt;br /&gt;
&lt;br /&gt;
 AuthType Basic&lt;br /&gt;
 AuthName &amp;quot;system - &amp;quot;&lt;br /&gt;
 Options +Indexes&lt;br /&gt;
 IndexOptions +FancyIndexing&lt;br /&gt;
 AuthUserFile /*ihr_serverpfad/projektpfad/filadmin/downloads/.htpasswd&lt;br /&gt;
 AuthGroupFile /dev/null&lt;br /&gt;
 require valid-user&lt;br /&gt;
&lt;br /&gt;
* ihr_serverpfad  finden Sie in Ihrem Kundenmenu unter Technische Infos oder durch Eingabe des Befehls $PWD in der Shell.&lt;br /&gt;
&lt;br /&gt;
Den User mit verschlüseltem Passwort in dem Fall in der .htpasswd vorhanden sein.&lt;br /&gt;
&lt;br /&gt;
Die Unterseite mit dem Directory Listing muss von der TYPO3 index.php ausgeschlossen werden und erreichen Sie über die .htaccess in dem Projektverzeichnis mit folgenden Angaben nach der RewriteEngine On:&lt;br /&gt;
&lt;br /&gt;
 RewriteRule ^fileadmin/downloads/$ - [L]&lt;br /&gt;
 RewriteRule ^fileadmin/downloads/.*$ - [L]&lt;br /&gt;
&lt;br /&gt;
==== Startdatei festlegen ====&lt;br /&gt;
Mit dem vorigen Beispiel kann man auch festlegen welche Dateien beim Aufruf eines Verzeichnisses (oder der Webadresse) an den Browser geliefert werden sollen. Manchmal hat man den Fall das die Startdatei eines CMS index.php heißt und bei Wartungsarbeiten die Datei index.html aufgerufen werden soll.&lt;br /&gt;
&lt;br /&gt;
 DirectoryIndex index.html index.php start.html&lt;br /&gt;
&lt;br /&gt;
weist den Apache an falls vorhanden die Datei index.html aufzurufen, wenn nicht die index.php und so weiter.&lt;br /&gt;
&lt;br /&gt;
Bei Wartungsarbeiten kann man nun einfach eine index.html aufspielen die bei Aufruf der Domain angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
==== PHP - Werte setzen ====&lt;br /&gt;
Wenn der Server das erlaubt kann man es folgendermaßen machen:&lt;br /&gt;
===== PHP Memory Limit =====&lt;br /&gt;
 php_value memory_limit 256M&lt;br /&gt;
===== PHP Execution Time =====&lt;br /&gt;
 php_value max_execution_time 240&lt;br /&gt;
&lt;br /&gt;
==== Error Reporting ====&lt;br /&gt;
===== Produktiv Betrieb =====&lt;br /&gt;
(Fehler unterdrückt aber protokolliert)&lt;br /&gt;
&lt;br /&gt;
 php_value error_reporting 2047&lt;br /&gt;
 php_value display_errors 0&lt;br /&gt;
 php_value log_errors 1&lt;br /&gt;
 php_value error_log /eigener/pfad/fehler.log&lt;br /&gt;
&lt;br /&gt;
===== Entwicklung =====&lt;br /&gt;
hier sollte display_errors auf 1 stehen&lt;br /&gt;
&lt;br /&gt;
siehe auch [[PHP - Error Reporting / Fehlerbehandlung]]&lt;br /&gt;
&lt;br /&gt;
siehe auch [[TYPO3 - Error Reporting / Fehlerbehandlung]]&lt;br /&gt;
&lt;br /&gt;
==== Skripte sperren ====&lt;br /&gt;
z.B. bei Überlastung durch ein Skript (hier im Beispiel meineDomain.de/ajax/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteCond %{REQUEST_URI}   (.*)ajax(.*)   [NC]&lt;br /&gt;
RewriteRule ^(.*)  - [F]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Browser Caching ==&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_expires.c&amp;gt;&lt;br /&gt;
ExpiresActive On&lt;br /&gt;
ExpiresByType text/html &amp;quot;access plus 500 seconds&amp;quot;&lt;br /&gt;
ExpiresByType image/gif &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType image/ico &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType image/jpeg &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType image/jpg &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType image/png &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType text/css &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType text/javascript &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType application/x-javascript &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
ExpiresByType application/javascript &amp;quot;access plus 14 days&amp;quot;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Zugriff auf Ordner ==&lt;br /&gt;
=== Sperren ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# This file restricts access to the fileadmin/user_upload/_import_export_ directory. It is&lt;br /&gt;
# meant to protect temporary files which could contain sensible&lt;br /&gt;
# information. Please do not touch.&lt;br /&gt;
&lt;br /&gt;
# Apache &amp;lt; 2.3&lt;br /&gt;
&amp;lt;IfModule !mod_authz_core.c&amp;gt;&lt;br /&gt;
	Order allow,deny&lt;br /&gt;
	Deny from all&lt;br /&gt;
	Satisfy All&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Apache ≥ 2.3&lt;br /&gt;
&amp;lt;IfModule mod_authz_core.c&amp;gt;&lt;br /&gt;
	Require all denied&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weiterleitung mit .htaccess ==&lt;br /&gt;
=== Beispiele mit Fokus auf TYPO3 ===&lt;br /&gt;
Quelle  Weiland (s.o.)&lt;br /&gt;
====Weiterleitungen (Redirects)====&lt;br /&gt;
===== Common Cases =====&lt;br /&gt;
Einzelne Unterseiten weiterleiten&lt;br /&gt;
&lt;br /&gt;
Aufrufe einer Unterseite (z.B. a.html) auf eine andere Unterseite (z.B. b.html) innerhalb der selben Domain weiterleiten.&lt;br /&gt;
Redirect 301 /a.html /b.html&lt;br /&gt;
&lt;br /&gt;
Ganzen Ordner / Verzeichnis weiterleiten&lt;br /&gt;
&lt;br /&gt;
Aufrufe eines Ordners (z.B. /a) auf einen anderen Ordner innerhalb der selben Domain (z.B. /b) weiterleiten. Die Weiterleitung wirkt sich auch auf alle Dateien innerhalb des Ordners /a aus, so wird z.B. der Aufruf von /a/test.html auf /b/test.html weitergeleitet.&lt;br /&gt;
 Redirect 301 /a /b&lt;br /&gt;
&lt;br /&gt;
Domain Weiterleitung: Ganze Domain umleiten&lt;br /&gt;
&lt;br /&gt;
Aufrufe einer Unterseite (URL) von Domain A auf die selbe Unterseite (URL) unter Domain B weiterleiten.&lt;br /&gt;
z.B. domain-a.de/test.html auf domain-b.de/test.html weiterleiten wobei dies nicht nur für test.html, sondern auch für alle weiteren Unterseiten gilt.&lt;br /&gt;
 Redirect 301 / http://www.domain-b.de/&lt;br /&gt;
&lt;br /&gt;
Alternative Lösung mittels RewriteCond / RewriteRule:&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{HTTP_HOST} domain-a.de$ [NC]&lt;br /&gt;
 RewriteRule ^(.*) http://www.domain-b.de/$1 [R=301,L]&lt;br /&gt;
&lt;br /&gt;
URLs ohne www. auf URLs mit www. weiterleiten&lt;br /&gt;
&lt;br /&gt;
Standard Domain definieren und Aufrufe einer URL ohne die Subdomain www. auf die entsprechende URL mit www. weiterleiten um z.B. doppelte Inhalte für Suchmaschinen zu vermeiden.&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^domain.de$ [NC]&lt;br /&gt;
 RewriteRule (.*) http://www.domain.de/$1 [R=301,L]&lt;br /&gt;
&lt;br /&gt;
Alle Unterseiten auf Startseite weiterleiten&lt;br /&gt;
&lt;br /&gt;
Alle Aufrufe auf Unterseiten einer Domain mit Ausnahme der index.html, der Style.css sowie aller Dateien im Ordner /img/ auf die Startseite weiterleiten.&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
 RewriteCond %{REQUEST_URI} !^/(index\.html|style\.css)?$ [NC]&lt;br /&gt;
 RewriteCond %{REQUEST_URI} !^/img(/|$) [NC]&lt;br /&gt;
 RewriteRule ^.*$ /index.html [L,R=301]&lt;br /&gt;
URL mit Parameter weiterleiten&lt;br /&gt;
&lt;br /&gt;
Aufrufe von URLs welche einen bestimmten Parameter (z.B. test) enthalten, unabhängig von dessen Wert, auf ein Verzeichnis (z.B. /verzeichnis/) oder eine Unterseite weiterleiten.&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{QUERY_STRING} ^test=(.*)$&lt;br /&gt;
 RewriteRule ^(.*)$ /verzeichnis/? [R=301,L]&lt;br /&gt;
&lt;br /&gt;
URLs mit einem bestimmten Parameterwert weiterleiten (In diesem Fall Wert &amp;quot;test&amp;quot; für den Parameter &amp;quot;s&amp;quot; auf das Verzeichnis &amp;quot;test&amp;quot; weiterleiten).&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{QUERY_STRING} ^s=test$&lt;br /&gt;
 RewriteRule ^(.*)$ /test/? [R=301,L]&lt;br /&gt;
Parameter aus URL entfernen&lt;br /&gt;
&lt;br /&gt;
Aufrufe von URLs welche einen bestimmten Parameter (z.B. www.domain.de/verzeichnis/?test=...) enthalten, unabhängig von dessen Wert, auf die selbe URL ohne Parameter am Ende (z.B. www.domain.de/verzeichnis/) weiterleiten bzw. den den Parameter aus der URL entfernen. Falls die Regel nur für einen bestimmten Parameter Wert gelten soll, kann der Code analog zum vorherigen Beispiel modifiziert werden.&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{QUERY_STRING} test=(.*)$&lt;br /&gt;
 RewriteRule ^(.*)$ /$1? [R=301,L] &lt;br /&gt;
&lt;br /&gt;
===== Allgemeines =====&lt;br /&gt;
&lt;br /&gt;
Die Weiterleitung von Domains und Anfragen zu einzelnen Webseiten ist eine der Hauptanwendungen der .htaccess Datei. Das notwendige Apache Modul mod_rewrite ist in unseren Hosting Tarifen vorhanden. &lt;br /&gt;
&lt;br /&gt;
Die Weiterleitung muss jedoch in der .htaccess Datei zunächst mit folgendem Eintrag aktiviert werden (in den weiteren Beispielen haben wir diese Zeile weggelassen):&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
301 oder 302 Weiterleitung?&lt;br /&gt;
&lt;br /&gt;
Der Weiterleitung (Redirect) sollte man noch einen Statuscode mitgeben: 301 oder 302. Worin liegt der Unterschied? &lt;br /&gt;
&lt;br /&gt;
 301: die Weiterleitung ist dauerhaft, z.B. weil die Navigationsstruktur einer Webseite umgestellt wurde&lt;br /&gt;
&lt;br /&gt;
 302: die Weiterleitung erfolgt nur vorübergehend, anschließend gilt wieder die bisherige Adresse&lt;br /&gt;
&lt;br /&gt;
Am Ende der RewriteRule Zeile wird der Code für die Weiterleitung (Redirect) in eckigen Klammern angegeben. Mit dem zusätzlichen Parameter L (Letzter, Last) kann man festlegen, dass die weiteren Anweisungen in der .htaccess Datei ignoriert werden sollen. Hierzu ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
 RewriteRule ^neues\.html$ /aktuelles.html [R=301,L]&lt;br /&gt;
Damit wird die Seite domain.tld/neues.html dauerhaft auf domain.tlld/aktuelles.htmlweitergeleitet.&lt;br /&gt;
&lt;br /&gt;
Die Schreibweise der Rewrite Regeln basiert dabei auf &amp;quot;Regulären Ausdrücken&amp;quot; (Regular Expressions, regex). &lt;br /&gt;
&lt;br /&gt;
Mit den Zeichen ^ und $ wird Anfang und Ende der umzuleitenden Seite gekennzeichnet. Der Punkt . steht in regulären Ausdrücken für ein beliebiges Zeichen, wenn wir wirklich einen Punkt meinen, dann wird dies mit einem Backslash \ gekennzeichnet (\ bedeutet also: exakt das nächste Zeichen).&lt;br /&gt;
&lt;br /&gt;
====Besonderheit: Anker auf einer Seite====&lt;br /&gt;
&lt;br /&gt;
Auf einer Webseite können &amp;quot;Anker&amp;quot; als Sprungmarke gesetzt sein. Beim Aufruf wird im Browser nicht auf den Anfang der Seite sondern direkt zum Ankerpunkt gesprungen. Der Anker wird durch ein Hash-Zeichen # in der URL gefolgt vom Namen der Sprungmarke gekennzeichnet. Beispiel für eine Adresse mit Anker:&lt;br /&gt;
&lt;br /&gt;
 domain.tld/aktuelles.html#artikel25&lt;br /&gt;
Soll per .htaccess Weiterleitung direkt auf eine Sprungmarke verwiesen werden, muss der zusätzliche Parameter NE (No Encoding) in eckigen Klammern angegeben werden:&lt;br /&gt;
&lt;br /&gt;
 RewriteRule ^neues\.html$ /aktuelles.html#artikel25 [R=301,L,NE]&lt;br /&gt;
Domain auf verschlüsselte Verbindung umleiten&lt;br /&gt;
&lt;br /&gt;
Sollen alle Seiten einer Domain ausschließlich über eine SSL-Verbindung aufgerufen werden, so kann dies über einen Eintrag in der .htaccess Datei im Startverzeichnis der Domain eingerichtet werden:&lt;br /&gt;
&lt;br /&gt;
 RewriteCond %{SERVER_PORT} !^443$&lt;br /&gt;
 RewriteRule (.*) https://%{HTTP_HOST}/$1 [L]&lt;br /&gt;
In der ersten Zeile wird die Funktion zum Umschreiben von URLs im Apache Webserver aktiviert. In der zweiten Zeile wird die Bedingung definiert &amp;quot;Wenn der Aufruf nicht auf Port 443 erfolgt&amp;quot; (Port 443 wird für SSL-Verschlüsselung verwendet, Port 80 für unverschlüsselte Aufrufe). Zeile 3 ist die Regel für das Umschreiben der URL. Wenn die Bedingung aus Zeile 2 zutrifft, werden die Aufrufe einer beliebigen Seite auf die gleiche Domain (${HTTP_HOST}) jedoch über das https:// Protokoll umgeleitet. Mit /$1 wird die ursprüngliche URL (z.B. impressum.html) an den Domainnamen angefügt. Mit dem Parameter [L] wird angegeben, dass das Umschreiben der URLs hier enden soll, weitere Zeilen in der .htaccess Datei werden also ignoriert.&lt;br /&gt;
&lt;br /&gt;
====Domain name-of-domain.net nach name-der-domain.de umleiten====&lt;br /&gt;
&lt;br /&gt;
Oftmals werden für ein Projekt mehrere Domains registriert, um verschiedene Schreibweisen abzudecken. Nach außen wird eine Hauptdomain kommunziert (Beispiel: name-der-domain.de als Hautpdomain, dazu name-of-domain.net als Zusatzdomains). &lt;br /&gt;
&lt;br /&gt;
Mit folgendem Eintrag in der .htaccess Datei werden alle Aufrufe für name-of-domain.net nach name-der-domain.de weitergeleitet:&lt;br /&gt;
&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^(www\.)?name-of-domain\.net$ [NC]&lt;br /&gt;
 RewriteRule ^(.*)$ http://www.name-der-domain.de/$1 [R=301,L]&lt;br /&gt;
Die Weiterleitung nach name-der-domain.de erfolgt dabei mit dem Statuscode 301 (permanent), so dass auch in Suchmaschinen auf Dauer nur diese erscheint. Dadurch werden Probleme mit &amp;quot;doppeltem Inhalt&amp;quot; (Duplicate Content) vermieden. Alle bei der ursprünglichen Domain übermittelten Parameter werden an die Zieldomain weitergegeben.&lt;br /&gt;
&lt;br /&gt;
====Einer Domain immer www. voranstellen====&lt;br /&gt;
&lt;br /&gt;
Mit folgendem Eintrag in der .htaccess Datei werden alle Aufrufe für eine Domain ohne www auf die Variante mit www weitergeleitet:&lt;br /&gt;
&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^name-der-domain\.de$ [NC]&lt;br /&gt;
 RewriteRule ^(.*)$ http://www.name-der-domain.de/$1 [R=301,L]&lt;br /&gt;
Die Weiterleitung nach www.name-der-domain.de erfolgt dabei mit dem Statuscode 301 (permanent), so dass auch in Suchmaschinen auf Dauer nur diese erscheint.&lt;br /&gt;
&lt;br /&gt;
====Domain auf eine Seite leiten====&lt;br /&gt;
&lt;br /&gt;
Bestimmte Domains oder Subdomains sollen entweder mit oder ohne www auf eine bestimmte Unterseite weitergeleitet werden.&lt;br /&gt;
&lt;br /&gt;
Dazu fügen Sie folgende Zeilen in Ihre .htaccess ein:&lt;br /&gt;
&lt;br /&gt;
 #Ohne realurl: &lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^(www\.)?name-der-domain\.de &lt;br /&gt;
 RewriteRule ^$ /index.php?id=85 &lt;br /&gt;
&lt;br /&gt;
 #oder realurl/simulatestatic mit html Suffix: &lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^(www\.)?name-der-domain\.de &lt;br /&gt;
 RewriteRule ^$ /unterseite.html &lt;br /&gt;
&lt;br /&gt;
 #oder realurl ohne html Suffix: &lt;br /&gt;
&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^(www\.)?name-der-domain\.de &lt;br /&gt;
 RewriteRule ^$ /unterseite/ &lt;br /&gt;
&lt;br /&gt;
====Weiterleitung auf eine andere Domain zu einer Unterseite====&lt;br /&gt;
&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^(www\.)?name-of-domain\.net [NC]&lt;br /&gt;
 RewriteRule ^(.*)$ http://www.name-der-domain.de/unterseite.hmtl [R=301,L] &lt;br /&gt;
 Redirect mit ? in der URL&lt;br /&gt;
&lt;br /&gt;
http://www.domainname.de/index.php?id=7&lt;br /&gt;
soll nach&lt;br /&gt;
&lt;br /&gt;
http://www.domainname.de/impressum.html&lt;br /&gt;
umgeleitet werden. Das Problem ist das ? in der alten URL und muss per QUERY_STRING in der Condition abgefragt werden. &lt;br /&gt;
Lösung:&lt;br /&gt;
&lt;br /&gt;
 RewriteCond %{QUERY_STRING} ^id=7$&lt;br /&gt;
 RewriteRule ^.*$ http://www.domainname.de/impressum.html? [L,R=301]&lt;br /&gt;
Wichtig ist auch der Browser-Cache. Der sollte unbedingt geleert werden, denn wenn ein Aufruf noch im Cache drin ist kann dadurch u.U. immer auf die falsche Seite leiten.&lt;br /&gt;
&lt;br /&gt;
So verhindert man, dass alte durch einen Umzug oder Neuprogrammierung nicht mehr vorhandene URLs in den Suchmaschinen zu einem schlechteren Ranking&lt;br /&gt;
&lt;br /&gt;
=== Weitere Beispiele (älter) ===&lt;br /&gt;
&lt;br /&gt;
Hinweis: eine Alternative hierfür ist eine PHP Weiterleitung ([[PHP - Tipps und Tricks]])&lt;br /&gt;
Quelle Dr.Web 28.12.2006&lt;br /&gt;
&lt;br /&gt;
Sie können sowohl Zugriffe auf bestimmte Dateien als auch auf Verzeichnisse bequem weiterleiten. Das klappt innerhalb der eigenen Domain, aber auch mit externen Verweisen.&lt;br /&gt;
&lt;br /&gt;
Die Datei .htaccess kann mit jedem Text-Editor bearbeitet werden. Eine Umleitung könnte so aussehen:&lt;br /&gt;
&lt;br /&gt;
 Redirect /beispielverzeichnis http://www.drweb.de&lt;br /&gt;
&lt;br /&gt;
Ruft jemand die URL http://www.drweb.de/beispielverzeichnis auf landet er ohne weiteren Zwischenstopp direkt auf der Startseite.&lt;br /&gt;
&lt;br /&gt;
Mit Einzeldateien klappt es auch:&lt;br /&gt;
&lt;br /&gt;
 Redirect /beispielseite.shtml http://www.drweb.de&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
 Redirect /beispielseite.shtml neueseite.shtml&lt;br /&gt;
&lt;br /&gt;
Wer mag, kann die gesamte Domain auf eine andere umleiten&lt;br /&gt;
&lt;br /&gt;
 Redirect / http://www.drweb.de/&lt;br /&gt;
&lt;br /&gt;
Nützlich während Bauarbeiten, bei Reparaturen oder wenn Dateien durch andere ersetzt wurden. Da die Umleitung serverseitig geschieht, spielt der Browser des Besuchers keine Rolle.&lt;br /&gt;
&lt;br /&gt;
Weitere nützliche Beispiele:&lt;br /&gt;
&lt;br /&gt;
Den Domainnamen ohne www auf den mit www umleiten. Es wird der Code 301 mitgegeben.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RewriteEngine on&lt;br /&gt;
RewriteCond %{HTTP_HOST} !^www\. [NC]&lt;br /&gt;
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Weiterleitung auf sichere Verbindung (https) ===&lt;br /&gt;
== Umleitung auf https ==&lt;br /&gt;
Sichere Seiten sind seid 2019 Standard und quasi Pflicht. Mit diesem Code kann man von http auf https weiterleiten und gibt einen 301 (Moved Permanently) Header mit.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_rewrite.c&amp;gt;&lt;br /&gt;
  # Enable URL rewriting&lt;br /&gt;
  RewriteEngine On&lt;br /&gt;
  # Redirect to https&lt;br /&gt;
  RewriteCond %{SERVER_PORT} !^443$&lt;br /&gt;
  RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Moved Permanently 301 Redirect ===&lt;br /&gt;
Quelle:http://www.fladi.de/2008/04/28/howto-webseiten-redirect-mit-301/ (25.7.2008)&lt;br /&gt;
&lt;br /&gt;
Was ist ein 301 redirect?&lt;br /&gt;
&lt;br /&gt;
301 redirect ist die wohl beste Möglichkeit das aktuelle Suchmaschinenranking beim Umzug einer Seite oder des gesamten Webauftritts zu behalten. Der Code “301″ steht für “moved permanently” (dauerhaft verschoben). Ein solches Redirect wird in der .htaccess Datei eintragen. Es trägt die Form (alles in einer Zeile):&lt;br /&gt;
&lt;br /&gt;
 redirect 301 pfad/alte/seite/datei.html http://www.domain.de/pfad/neue/seite/datei.html &lt;br /&gt;
&lt;br /&gt;
Beachte, kein “http://www” in das erste Statement zu schreiben. Es muss der komplette Pfad vom Root deines Webservers angegeben werden. Schauen wir uns die Zeile nun nochmal genauer an:&lt;br /&gt;
&lt;br /&gt;
    * “redirect 301″ - die eigentliche Anweisung für den Webserver&lt;br /&gt;
    * “/pfad/alte/seite/datei.html” - die Seite die umgeleitet werden soll&lt;br /&gt;
    * “http://www.domain.de/pfad/neue/seite.datei.html” - die komplette neue URL&lt;br /&gt;
&lt;br /&gt;
Wie reagiert nun ein Suchmaschinen-Spider auf eine solche Umleitung? Die .htaccess wird ja nicht vom Spider ausgelesen, sondern vom Webserver “ausgeführt”. Der Spider jedoch erkennt den Statuscode, den der Webserver liefert. Beim nächsten Update seiner Datenbank sollte die Suchmaschine nun die alte URL aus dem Index werfen und die neue aufnehmen. Häufig kommt es aber auch vor, dass alte und neue URL gemischt auftauchen. Auch leichte Änderungen im Pagerank können auftreten. Es dauert so ca. 6-8 Wochen bis sich die Änderungen an der Seite auch in den Suchergebnissen niederschlagen.&lt;br /&gt;
&lt;br /&gt;
Weitere Möglichkeiten von 301 redirect:&lt;br /&gt;
&lt;br /&gt;
   1. Um ALLE Dateien Deiner Domain mithilfe einer .htaccess umzuleiten kannst Du (auf einem Unix/Linux-Webserver) i.d.R. folgendes verwenden:&lt;br /&gt;
 redirect 301 ^(.*)$ http://www.domain.de&lt;br /&gt;
 redirectMatch permanent ^(.*)$ http://www.domain.de&lt;br /&gt;
&lt;br /&gt;
Um Deine alte Startseite (index.html) umzuleiten:&lt;br /&gt;
 redirect 301 /index.html http://www.domain.de/index.html&lt;br /&gt;
 redirect permanent /index.html http://www.domain.de/index.html&lt;br /&gt;
&lt;br /&gt;
2. Wenn Du http://domain.de auf http://www.domain.de umleiten möchtest und mod_rewrite auf dem Webserver verfügbar ist, erreichst Du dies durch folgende .htaccess:&lt;br /&gt;
&lt;br /&gt;
 Options +FollowSymLinks&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^domain\.de&lt;br /&gt;
 RewriteRule ^(.*)$ http://www.domain.de/$1 [R=permanent,L]&lt;br /&gt;
&lt;br /&gt;
 oder&lt;br /&gt;
&lt;br /&gt;
 Options +FollowSymLinks&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{HTTP_HOST} ^domain\.de$ [NC]&lt;br /&gt;
 RewriteRule ^(.*)$ http://www.domain.de/$1 [R=301,L]&lt;br /&gt;
&lt;br /&gt;
3. Alle .html Dateien auf .php Dateien umzuleiten ist durch mod_rewrite auch kein großes Problem:&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
 RewriteRule (.*).html$ /$1.php&lt;br /&gt;
&lt;br /&gt;
4. Um ein Verzeichnis und alles darunter umzuleiten:&lt;br /&gt;
&lt;br /&gt;
 redirectMatch 301 ^/verzeichnis-alt/(.*) http://www.domain.de/verzeichnis-neu/&lt;br /&gt;
&lt;br /&gt;
=== Warum nicht per META-Tag redirect machen? ===&lt;br /&gt;
&lt;br /&gt;
Die Umleitung per META-Tag erfolgt direkt in der aufgerufenen Seite. Dort wird im HEAD-Teil&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;meta http-equiv=”refresh” content=”0; url=http://www.domain.de/”&amp;gt;&lt;br /&gt;
eingetragen. Hierbei bewirkt das “content=10″, dass der Browser nach 10 Sekunden die darauffolgende URL aufruft. Wenn man “content=0″ einträgt wird die Umleitung sofort ausgeführt. Ein paar alte Browser unterstützen diese Art der Umleitung nicht. Deshalb ist es besser noch zusätzlich den Link (neue Domain) mit anzugeben.&lt;br /&gt;
&lt;br /&gt;
Technisch gesehen liefert die angefragte Seite, wie auch die Seite auf die umgeleitet wird, einen Statuscode “200 OK” zurück. Es sind also zwei unabhängige Seiten. Dementsprechend versucht die Suchmaschinen auch beide Seiten zu indizieren. Hier genau liegt aber das Problem. Denn der Spider des Suchmaschinenbetreibers erkennt die Umleitung und wertet Deine Seite deshalb u.U. ab, da es sich um eine beliebte SPAM-Methode handelt. So könnte man 1000 Domains mit solchen Seiten und jeder Menge Keywords einrichten. Echte Besucher (kein Spider) werden umgeleitet auf die eigentliche Seite. Indiziert wird aber nicht nur die eigentliche Seite sondern auch die 1000 Domains mit Keywords, die meist gar nichts mit dem eingentlichen Inhalt zu tun haben.&lt;br /&gt;
&lt;br /&gt;
Beim 301 redirect wird hingegen nur die echte Zielseite in den Index aufgenommen und durch den Statuscode kann der Suchmaschinenbetreiber zusätzlich noch die veralteten Seite aus dem Index werfen. Dies ist also der beste Weg um alte Seiten auf neue umzuleiten und gleichzeitig wird auch der Page Rank mit übertragen.&lt;br /&gt;
&lt;br /&gt;
===Weiterleitung über IP===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Options +FollowSymlinks&lt;br /&gt;
RewriteEngine on&lt;br /&gt;
&lt;br /&gt;
#IP Bedingung&lt;br /&gt;
RewriteCond %{REMOTE_HOST} ^85\.13\.128\.137&lt;br /&gt;
&lt;br /&gt;
#Zielseite erlauben&lt;br /&gt;
RewriteCond %{REQUEST_URI} !/ip-remote\.php$&lt;br /&gt;
&lt;br /&gt;
#Umleiten&lt;br /&gt;
#RewriteRule ^/* http://demo.webmynet.de/ip-remote.php [R,NE,NC]&lt;br /&gt;
RewriteRule /(.*)$ /ip-remote.php [R=302,L]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Erlaubte Anweisungen in .htaccess-Dateien ==&lt;br /&gt;
&lt;br /&gt;
http://de.selfhtml.org/servercgi/server/htaccess.htm&lt;br /&gt;
&lt;br /&gt;
Auszug (Datum des Zugriffs: 10.9.2007): &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Die Anweisung AllowOverride kann nicht innerhalb einer .htaccess notiert werden, sondern wird ausschließlich vom Server-Administrator in der zentralen Konfigurationsdatei vorgegeben. Um den AllowOverride-Wert in Erfahrung zu bringen, benötigen Sie Einsicht in die Serverkonfiguration. Kontaktieren Sie dazu gegebenenfalls Ihren Webhosting-Provider. Dieser kann den Wert auch ändern, falls Sie bestimmte bisher nicht erlaubte Anweisungen verwenden möchten. Im einzelnen gibt es dafür folgende mögliche Werte:&lt;br /&gt;
&lt;br /&gt;
    * Mit AllowOverride None wird der Webserver angewiesen, .htaccess-Dateien zu ignorieren. Das ist im Übrigen die Voreinstellung.&lt;br /&gt;
    * Mit AllowOverride All wird festgelegt, dass in einer .htaccess-Datei (so gut wie) sämtliche zentrale Vorgaben überschrieben und damit abgeändert werden dürfen. Das kann bedeuten, dass Vorhaben, die eigentlich verboten sind (beispielsweise die Ausführung von CGI-Scripts), mit Hilfe einer .htaccess-Datei erlaubt werden. Als Server-Administrator werden Sie diese Anweisung also nur sehr vorsichtig einsetzen.&lt;br /&gt;
    * Mit AllowOverride Options wird festgelegt, dass in einer .htaccess-Datei nach unten Anweisungen zur Steuerung spezieller Verzeichniseigenschaften zulässig sind.&lt;br /&gt;
    * Mit AllowOverride Limit wird festgelegt, dass in einer .htaccess-Datei nach unten Zugriffe von bestimmten Hosts erlaubt oder untersagt werden können.&lt;br /&gt;
    * Mit AllowOverride Indexes wird festgelegt, dass in einer .htaccess-Datei nach unten Anweisungen zur Steuerung von Verzeichnisindizes zulässig sind.&lt;br /&gt;
    * Mit AllowOverride FileInfo wird festgelegt, dass in einer .htaccess-Datei Anweisungen zur Akzeptanz bestimmter Dokumenttypen zulässig sind - beispielsweie, um nach unten Individuelle Fehlermeldungen ausgeben zu können.&lt;br /&gt;
    * Mit AllowOverride AuthConfig wird festgelegt, dass in einer .htaccess-Datei Autorisierungsanweisungen stehen dürfen - das betrifft beispielsweise Regelungen zum nach unten Passwortschutz.&lt;br /&gt;
&lt;br /&gt;
Diese Werte können auch miteinander kombiniert werden. All ist der mächtigste Parameter, mit dem alles das zugelassen wird, was die anderen Parameter steuern.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Ändern muß natürlich der Server neu gestartet werden (bei Debian: apache restart)&lt;br /&gt;
&lt;br /&gt;
==IP Adressen sperren==&lt;br /&gt;
&lt;br /&gt;
Manchmal ist es notwendig, bestimmte IP Adressen vom Aufruf der Webseite auszusperren, z.B. bei einem Angriffsversuch auf die Webseite. Über folgenden Eintrag in der .htaccess Datei (z.B. vor dem Eintrag &amp;#039;RewriteEngine On&amp;#039;) im Startverzeichnis der Seite lassen sich unerwünschte Besucher abweisen:&lt;br /&gt;
&lt;br /&gt;
 order allow,deny &lt;br /&gt;
 deny from 192.168.2.17 &lt;br /&gt;
 deny from 10.10.20.63 &lt;br /&gt;
 allow from all&lt;br /&gt;
Bei mehreren IP Adressen wird jede in eine eigene Zeile eingetragen. Die Einstellung gilt auch für alle Unterverzeichnisse. Wenn jemand mit einer gesperrten Adresse versucht, die Seite aufzurufen, erhält er einen 403 Fehlercode.&lt;br /&gt;
&lt;br /&gt;
==HTML5 Videos / bestimmte Dateitypen zulassen ==&lt;br /&gt;
&lt;br /&gt;
Falls es in einzelnen Browsern zu Problemen beim Abspielen von per HTML5 eingebundenen Videos kommt, helfen eventuell folgende Zeilen in der .htaccess Datei im Projektverzeichnis:&lt;br /&gt;
&lt;br /&gt;
 AddType video/ogg .ogm &lt;br /&gt;
 AddType video/ogg .ogv &lt;br /&gt;
 AddType video/ogg .ogg &lt;br /&gt;
 AddType video/webm .webm &lt;br /&gt;
 AddType audio/webm .weba &lt;br /&gt;
 AddType video/mp4 .mp4 &lt;br /&gt;
 AddType video/x-m4v .m4v&lt;br /&gt;
&lt;br /&gt;
== htaccess für Typo3 ==&lt;br /&gt;
&lt;br /&gt;
http://www.typo3lexikon.de/server/htaccess.html (11/2014)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.htaccess für TYPO3&lt;br /&gt;
Ich möchte auf dieser Seite nicht erklären wie .htaccess-Dateien erstellt werden. Nein. Davon gibt es schon zu genüge Dokumentationen im Web:&lt;br /&gt;
&lt;br /&gt;
Allgemeines zu htaccess&lt;br /&gt;
&lt;br /&gt;
URLs manipulieren&lt;br /&gt;
&lt;br /&gt;
Reguläre Ausdrücke&lt;br /&gt;
&lt;br /&gt;
htaccess Beispiele&lt;br /&gt;
&lt;br /&gt;
Auf dieser Seite geht es mehr um das Zusammenspiel von TYPO3 und htaccess-Dateien gerade in Bezug unter der Verwendung von der Extension RealUrl. In den nächsten Zeilen werde ich Euch meine htaccess-Datei in Detail näher erklären:&lt;br /&gt;
&lt;br /&gt;
RewriteEngine&lt;br /&gt;
Mit RewriteEngine kannst Du das Modifizieren von URLs de- bzw. aktivieren. Erst wenn diese Option aktiviert ist, kannst du z.B. alle Anfragen, die an Deinen Server gesendet werden auf eine völlig andere Webseite umleiten.&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
Bestimmte Verzeichnisse nicht umschreiben&lt;br /&gt;
Wenn Ihr RealUrl installiert habt, dann erhaltet Ihr je nach Konfiguration URLs wie&lt;br /&gt;
&lt;br /&gt;
/meine-seite/kontakt/impressum.html&lt;br /&gt;
Dabei sind die vermeintlichen Ordner gar keine echten Ordner auf dem Server, sondern Informationen, die an die index.php weitergeleitet werden, um dann die gewünschte Seite aufrufen zu können. Was aber, wenn wir wirklich mal einen Ordner auf dem Server öffnen wollen? Dann darf dieser Name des Ordner NICHT an die index.php weitergeleitet werden. Um das zu erreichen verwende ich das Script aus der RealUrl-Dokumentation:&lt;br /&gt;
RewriteRule ^typo3$ - [L]&lt;br /&gt;
RewriteRule ^typo3/.*$ - [L]&lt;br /&gt;
RewriteRule ^uploads/.*$ - [L]&lt;br /&gt;
RewriteRule ^fileadmin/.*$ - [L]&lt;br /&gt;
RewriteRule ^typo3conf/.*$ - [L]&lt;br /&gt;
Hinweis&lt;br /&gt;
[L] bedeutet, dass nach dieser Umschreibung der URL keine weiteren Umschreibungen mehr ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Der Bindestrich (-) bedeutet, dass keine Umschreibung der URL stattfinden soll.&lt;br /&gt;
&lt;br /&gt;
Doppelter Content&lt;br /&gt;
Wer von Euch seine Seite schon mal mit www.seitwert.de bewertet hat, wird bestimmt schon mal über den Eintrag bzgl. doppelten Content/Inhalt gestoßen sein. So kommt es je nach Konfiguration vor, dass eine Seite wie sfroemken.de das Gleiche anzeigt wie www.sfroemken.de. Dieses &amp;quot;Problem&amp;quot; kann sich auch negativ auf die Position in den Suchergebnissen auswirken. Aber auch das lässt sich mit Hilfe der htaccess-Datei bereinigen:&lt;br /&gt;
&lt;br /&gt;
RewriteCond  %{HTTP_HOST} ^sfroemken\.de$ [NC]&lt;br /&gt;
RewriteRule ^(.*)$ www.sfroemken.de/$1 [R=301,L]&lt;br /&gt;
Erklärung&lt;br /&gt;
%{HTTP_HOST} kann in diesem Fall sfroemken.de oder aber auch www.sfroemken.de sein. Mit RewriteCond könnt Ihr nun überprüfen, ob der HTTP_HOST mit dem Wert sfroemken.de übereinstimmt. Dank [NC] soll die Groß- und Kleinschreibung bei diesem Vergleich nicht berücksichtigt werden.&lt;br /&gt;
&lt;br /&gt;
Wenn RewriteCond nun ein true zurück gibt, dann wird die Modifikation in RewriteRule ausgeführt. Alles was durch die Klammern markiert wurde, kann im zweiten Parameter mit $1 wiederverwendet werden. [R=301]: Das R steht für redirect und die 301 ist ein bestimmter Servercode, mit dem bestimmt wird, dass es sich bei dieser Weiterleitung um eine parmanente Weiterleitung handelt.&lt;br /&gt;
&lt;br /&gt;
So wird aus&lt;br /&gt;
&lt;br /&gt;
sfroemken.de/kontakt/index.php&lt;br /&gt;
ein&lt;br /&gt;
&lt;br /&gt;
www.sfroemken.de/kontakt/index.php&lt;br /&gt;
Subdomains&lt;br /&gt;
Bei Subdomains müssen wir das genau andersrum machen. Dort gibt es kein www. Da www.seitwert.de aber trotzdem überprüft, ob die Domain auch mit einem www davor erreichbar ist, müssen wir das folgendermaßen abfangen:&lt;br /&gt;
&lt;br /&gt;
RewriteCond  %{HTTP_HOST} ^www\.typo3\.sfroemken\.de$ [NC]&lt;br /&gt;
RewriteRule ^(.*)$ typo3.sfroemken.de/$1 [R=301,L]&lt;br /&gt;
Ordner&lt;br /&gt;
Leider haben sich viele Surfer daran gewöhnt Ordner auf einem Server ohne abschließendem Slash (/) anzugeben. Damit dieser Slash automatisch hinten dran gemacht wird, können wir folgendes Script verwenden:&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
RewriteRule (.*[^/])$ %{HTTP_HOST}/$1/ [L,R]&lt;br /&gt;
Erklärung&lt;br /&gt;
Die ersten beiden RewriteCond fragen ab, ob es sich bei der aufzurufenden URL nicht um eine Datei handelt und nicht um einen symbolischen Link. Wenn beides zutrifft, kann getrost ein zusätzlicher Slash hinten angefügt werden.&lt;br /&gt;
&lt;br /&gt;
Achtung&lt;br /&gt;
Wenn Ihr RealUrl so konfiguriert habt, dass Ihr URLs wie&lt;br /&gt;
&lt;br /&gt;
/kontakt/impressum.html&lt;br /&gt;
erhaltet, dann muss das Script noch etwas angepasst werden, dann ansonsten erhaltet Ihr eine URL wie diese hier:&lt;br /&gt;
&lt;br /&gt;
/kontakt/impressum.html/&lt;br /&gt;
Hier das angepasste Script:&lt;br /&gt;
&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} (^.htm$|^.html$)&lt;br /&gt;
RewriteRule (.*[^/])$ %{HTTP_HOST}/$1/ [L,R]&lt;br /&gt;
Heißt: Wenn die URL mit .htm oder .html endet, dann soll der zusätzliche Slash NICHT hinten dran gemacht werden.&lt;br /&gt;
&lt;br /&gt;
Index-Dateien in Ordnern&lt;br /&gt;
Je nach Projekt und Ordner kann es vorkommen, dass Du trotz RealUrl die Index-Dateien in bestimmten Ordnern ausführen möchtest:&lt;br /&gt;
&lt;br /&gt;
/fileadmin/projekt/download/index.php&lt;br /&gt;
Allerdings wird derzeit noch diese URL an die TYPO3-eigene index.php im Rootverzeichnis weitergeleitet. Um auch das zu unterbinden sind folgende 6 Zeilen vorgesehen:&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME}/index.html -f&lt;br /&gt;
RewriteRule / %{REQUEST_URI}/index.html [L]&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME}/index.htm -f&lt;br /&gt;
RewriteRule / %{REQUEST_URI}/index.htm [L]&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME}/index.php -f&lt;br /&gt;
RewriteRule / %{REQUEST_URI}/index.php [L]&lt;br /&gt;
URL-Modifikation für RealUrl&lt;br /&gt;
Dieses Script ist das wichtigste Script überhaupt für RealUrl. Hier wird nun endlich gesagt, dass alle Teile aus der URL an die TYPO3-eigene index.php weitergeleitet werden sollen zur Weiterverarbeitung durch RealUrl.&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-d&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
RewriteRule .* index.php&lt;br /&gt;
Hinweis&lt;br /&gt;
Je nach Art Eurer TYPO3-Installation könnte es sein, dass Eure index.php ein symbolischer Link ist. In diesem Fall müsst Ihr die letzt Zeile folgendermaßen ändern:&lt;br /&gt;
&lt;br /&gt;
RewriteRule .* /index.php&lt;br /&gt;
Scripmerger&lt;br /&gt;
Dieses Script benötigt Ihr nur, wenn Ihr die Extension scriptmerger verwenden wollt:&lt;br /&gt;
# Expires Header + Removal of ETag&lt;br /&gt;
&amp;lt;FilesMatch &amp;quot;\.(ico|png|gif|js|css|jpg|jpeg|swf)&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;IfModule mod_expires.c&amp;gt;&lt;br /&gt;
        ExpiresActive on&lt;br /&gt;
        ExpiresDefault &amp;quot;access plus 7 days&amp;quot;&lt;br /&gt;
        ExpiresDefault &amp;quot;access plus 2 months&amp;quot;&lt;br /&gt;
    &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# ETag&lt;br /&gt;
  FileETag MTime Size&lt;br /&gt;
  &amp;lt;IfModule mod_headers.c&amp;gt;&lt;br /&gt;
      FileETag none&lt;br /&gt;
      Header unset Last-Modified&lt;br /&gt;
    &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Compressed Content&lt;br /&gt;
&amp;lt;FilesMatch &amp;quot;\.gz\.(js|css)&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;IfModule mod_headers.c&amp;gt;&lt;br /&gt;
        Header set Content-Encoding gzip&lt;br /&gt;
    &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Shell Restriction auf all-inkl Server ===&lt;br /&gt;
Ab TYPO3 6 moniert das Install Tool das exec nicht augeführt werden darf. Es funktioniert wenn man die cgi Version von PHP nimmt. Das kann man per htaccess oder im KAS Backend einstellen.&lt;br /&gt;
&lt;br /&gt;
Beispiele.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AddHandler php55-cgi .php (sofern vom Server unterstützt)&lt;br /&gt;
AddHandler php54-cgi .php (sofern vom Server unterstützt)&lt;br /&gt;
AddHandler php53-cgi .php&lt;br /&gt;
AddHandler php52-cgi .php&lt;br /&gt;
AddHandler php5-cgi .php (Version entsprechend der PHP Apache-Modul Version)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHP Version auf Weiland Servern ===&lt;br /&gt;
 Über die PHP-Versionsauswahl im Kundenmenü können Sie die PHP-Version für eine Domain ändern. Folgende Anleitung erklärt, wie Sie die PHP Version für einzelne Verzeichnisse (und deren Unterverzeichnisse) ändern können.&lt;br /&gt;
&lt;br /&gt;
Das Verzeichnis kann dabei nur eine höhere PHP-Version erhalten, als die PHP-Version, die für die Domain im Kundenmenü eingestellt ist.&lt;br /&gt;
&lt;br /&gt;
Das bedeutet: Ist für die Domain PHP 5.6 im Kundenmenü eingestellt, können Sie für einzelne Verzeichnisse PHP 7.0 und höher einstellen, nicht jedoch niedrigere Versionen wie PHP 5.5. *&lt;br /&gt;
&lt;br /&gt;
Außerdem darf für die Domain kein Fast-CGI aktiviert sein.&lt;br /&gt;
&lt;br /&gt;
Um die PHP-Version für ein Verzeichnis zu ändern, legen Sie eine .htaccess-Datei mit folgender Anweisung in dem Verzeichnis ab. Die Anweisung ist abhängig von der PHP-Version, die Sie aktivieren möchten: &lt;br /&gt;
 AddType application/x-httpd-php72 .php&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=CSS_-_Baukasten&amp;diff=25390</id>
		<title>CSS - Baukasten</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=CSS_-_Baukasten&amp;diff=25390"/>
		<updated>2021-08-17T15:39:56Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: /* OLD STUFF */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Alt ! Siehe auch [[CSS - Snippets]]&lt;br /&gt;
Ziel des Abschnittes CSS-Baukasten ist es verschiedene CSS-Skripte vorzuhalten, die für verschiedene Projekte eingesetzt werden können.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
&lt;br /&gt;
[[CSS - Tipps &amp;amp; Tricks]]&lt;br /&gt;
&lt;br /&gt;
[[CSS - Snippets]]&lt;br /&gt;
== Standard Layouts ==&lt;br /&gt;
&lt;br /&gt;
=== CSS - Font Starter 2020 ===&lt;br /&gt;
Gute Größen für Fonts (html base size 16px). Von Vice übernommen. Evtl. ist normale Schrift etwas klein auf Retina.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--color-primary: black;&lt;br /&gt;
--color-accent: black;&lt;br /&gt;
--font-family-hed: VICE Grotesk, Helvetica Neue World, Helvetica Neue, Helvetica, Arial, sans-serif;&lt;br /&gt;
--font-weight-hed-normal: 500;&lt;br /&gt;
--font-weight-hed-bold: 900;&lt;br /&gt;
--line-height-hed-tight: 1;&lt;br /&gt;
--line-height-hed-normal: 1.3;&lt;br /&gt;
--line-height-hed-loose: 1.7;&lt;br /&gt;
--font-family-dek: VICE Grotesk, Helvetica Neue World, Helvetica Neue, Helvetica, Arial, sans-serif;&lt;br /&gt;
--font-weight-dek-normal: 400;&lt;br /&gt;
--font-weight-dek-bold: 700;&lt;br /&gt;
--line-height-dek-tight: 1;&lt;br /&gt;
--line-height-dek-normal: 1.3;&lt;br /&gt;
--line-height-dek-loose: 1.7;&lt;br /&gt;
--font-family-accent: Source Code Pro, Monaco, monospace;&lt;br /&gt;
--font-weight-accent-normal: 400;&lt;br /&gt;
--font-weight-accent-bold: 700;&lt;br /&gt;
--line-height-accent-tight: 1;&lt;br /&gt;
--line-height-accent-normal: 1.3;&lt;br /&gt;
--line-height-accent-loose: 1.7;&lt;br /&gt;
--font-family-body: Lora, Georgia, serif;&lt;br /&gt;
--font-weight-body-normal: 400;&lt;br /&gt;
--font-weight-body-bold: 700;&lt;br /&gt;
--line-height-body-tight: 1;&lt;br /&gt;
--line-height-body-normal: 1.3;&lt;br /&gt;
--line-height-body-loose: 1.7;&lt;br /&gt;
--font-size-h1: 3.125rem;&lt;br /&gt;
--font-size-h2: 2rem;&lt;br /&gt;
--font-size-h3: 1.25rem;&lt;br /&gt;
--font-size-h4: 1rem;&lt;br /&gt;
--font-size-h5: 0.8125rem;&lt;br /&gt;
--font-size-h6: 0.6875rem;&lt;br /&gt;
--font-size-body: 1.125rem;&lt;br /&gt;
--font-size-dropcap: 3.75rem;&lt;br /&gt;
--line-height-dropcap: 2.6875rem;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== OLD STUFF ==&lt;br /&gt;
[[Typo3 Standard-CSS mit YUI]]&lt;br /&gt;
&lt;br /&gt;
== CSS-Grid Systeme / CSS-Frameworks ==&lt;br /&gt;
=== Frameworks 2015 ===&lt;br /&gt;
==== Big ====&lt;br /&gt;
Bootstrap, Foundation, Grumby&lt;br /&gt;
==== Small ====&lt;br /&gt;
Pure.css, Skeleton, Cardinal, Base, KnaCSS, &lt;br /&gt;
=== Links ===&lt;br /&gt;
http://www.tripwiremagazine.com/2009/06/45-css-grid-systems-layout-generators-and-tutorials-that-every-designer-should-know.html&lt;br /&gt;
&lt;br /&gt;
hiervon sind die engl. Beschreibungen&lt;br /&gt;
&lt;br /&gt;
=== 1140 grid ===&lt;br /&gt;
* optimiert für 1280px&lt;br /&gt;
* skaliert bei kleineren Bildschirmen (inkl. Bilder)&lt;br /&gt;
* css3 queries sorgen dafür, daß es bei smartphones funktioniert&lt;br /&gt;
&lt;br /&gt;
http://cssgrid.net/&lt;br /&gt;
&lt;br /&gt;
=== YUI Yahoo User Interface ===&lt;br /&gt;
&lt;br /&gt;
=== 960gs ===&lt;br /&gt;
CSS Framework that worth a look. The download includes templates for Fireworks, Photoshops, Inkscape and etc. so that you can start designing your web template immediately. The PSD file that comes with guides ready save designers a lot of time.&lt;br /&gt;
&lt;br /&gt;
=== Blueprint ===&lt;br /&gt;
Blueprint: A CSS Framework&lt;br /&gt;
&lt;br /&gt;
Blueprint includes a CSS reset that eliminates the discrepancies across different browsers. There are a lot of external tools and templates to aid your web development with Blueprint. See some live Demos&lt;br /&gt;
http://www.blueprintcss.org/tests/&lt;br /&gt;
&lt;br /&gt;
=== YAML ===&lt;br /&gt;
YAML is another bulletproof CSS Framework that has a very good documentation. You can easily get started by downloading the PDF documentation and the sample project from the official site. There are some tools that will help you on your development too. For example, the YAML Builder can visually create YAML-based CSS layouts.&lt;br /&gt;
=== Tripoli Framework ===&lt;br /&gt;
&lt;br /&gt;
Tripoli had been tested and supports virtually all available browsers, including IE5! It comes with some base files, and some plugins such as “Layout”, “Visual”, “Type”, and “Negative”. Tripoli completly resets all default browser standards and rebuilds them quietly with modern web development in mind.&lt;br /&gt;
&lt;br /&gt;
Tripoli is not a CSS framework. It doesn’t tell you how to code your web site. Instead, it forms a solid HTML rendering engine and a base for creating dynamic layouts without interfering with typographic measurements.&lt;br /&gt;
&lt;br /&gt;
=== BlueTrip ===&lt;br /&gt;
&lt;br /&gt;
BlueTrip is a full featured and beautiful framework that combines advantages from different CSS Framework. The official site has a complete Documentation and Demos.&lt;br /&gt;
&lt;br /&gt;
Blueprint: A CSS Framework&lt;br /&gt;
&lt;br /&gt;
Blueprint includes a CSS reset that eliminates the discrepancies across different browsers. There are a lot of external tools and templates to aid your web development with Blueprint. See some live Demos&lt;br /&gt;
&lt;br /&gt;
=== 960 Grid System ===&lt;br /&gt;
&lt;br /&gt;
[[960 Grid System (960gs)]]&lt;br /&gt;
&lt;br /&gt;
CSS Framework that worth a look. The download includes templates for Fireworks, Photoshops, Inkscape and etc. so that you can start designing your web template immediately. The PSD file that comes with guides ready save designers a lot of time.&lt;br /&gt;
&lt;br /&gt;
=== Tripoli Framework ===&lt;br /&gt;
&lt;br /&gt;
Tripoli had been tested and supports virtually all available browsers, including IE5! It comes with some base files, and some plugins such as “Layout”, “Visual”, “Type”, and “Negative”. Tripoli completly resets all default browser standards and rebuilds them quietly with modern web development in mind.&lt;br /&gt;
&lt;br /&gt;
Tripoli is not a CSS framework. It doesn’t tell you how to code your web site. Instead, it forms a solid HTML rendering engine and a base for creating dynamic layouts without interfering with typographic measurements.&lt;br /&gt;
&lt;br /&gt;
=== YAML – Yet Another Multicolumn Layout ===&lt;br /&gt;
&lt;br /&gt;
YAML is another bulletproof CSS Framework that has a very good documentation. You can easily get started by downloading the PDF documentation and the sample project from the official site. There are some tools that will help you on your development too. For example, the YAML Builder can visually create YAML-based CSS layouts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BlueTrip ===&lt;br /&gt;
&lt;br /&gt;
BlueTrip is a full featured and beautiful framework that combines advantages from different CSS Framework. The official site has a complete Documentation and Demos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== YUI Grid CSS ===&lt;br /&gt;
&lt;br /&gt;
YUI Grids CSS support fluid-width layouts as well as fixed-width layouts. This is the advantage of YUI Grids CSS over the other CSS Frameworks. To get started with YUI Grids CSS, you can download the cheat sheet and YUI Grids Builder from the official site.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Elastic CSS Framework ===&lt;br /&gt;
&lt;br /&gt;
Elastic provides a declarative language to define the layout structure and behavior. This is a young framework, and the best site to demo the usage of Elastic is the official site itself. The Elastic CSS Framework has a lot of classes and helpers that will aid in the process of webdesign.&lt;br /&gt;
&lt;br /&gt;
=== SenCSS ===&lt;br /&gt;
&lt;br /&gt;
SenCSS doesn’t include a layout system, but it does provide other things such as baseline, fonts, paddings, margins and more. It comes with a commented version and a minified version which suitable for production use.&lt;br /&gt;
&lt;br /&gt;
=== The Golden Grid ===&lt;br /&gt;
&lt;br /&gt;
The Golden Grid is a web grid system. It ‘s a product of the search for the perfect modern grid system. It ‘s meant to be a CSS tool for grid based web sites.&lt;br /&gt;
&lt;br /&gt;
=== Content With Style ===&lt;br /&gt;
&lt;br /&gt;
This is a fixed width layout and the zip files contains a few layouts such as vertical navigation with 1 content column, vertical navigation with 2 content columns, and etc.&lt;br /&gt;
&lt;br /&gt;
===CSS-boilerplate===&lt;br /&gt;
&lt;br /&gt;
As one of the original authors of Blueprint CSS I’ve decided to re-factor my ideas into a stripped down framework which provides the bare essentials to begin any project. This framework will be lite and strive not to suggest un-semantic naming conventions. You’re the designer and your craft is important.&lt;br /&gt;
&lt;br /&gt;
=== Typogridphy ===&lt;br /&gt;
&lt;br /&gt;
Typogridphy is a CSS framework constructed to allow web designers and front-end developers to quickly code typograhically pleasing grid layouts.&lt;br /&gt;
&lt;br /&gt;
Based on the popular 960 Grid System, Typogridphy allows you to create grid layouts which are versatile and great looking. Typogridphy is made of fully validate, semantic and strict xHTML, and validate CSS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logicss ===&lt;br /&gt;
The Logic CSS framework is a collection of CSS files and a toolset designed to cut development times for web-standards compliant web layouts and templates.&lt;br /&gt;
&lt;br /&gt;
    * Common cross-browser rendering behavior approach (not a reset).&lt;br /&gt;
    * Beautiful font stacks.&lt;br /&gt;
    * Typography with text resizing capabilities and vertical baseline/rhythm.&lt;br /&gt;
    * Three totally flexible layout grid templates, customizable with the toolset.&lt;br /&gt;
          o Elastic layout using EMs.&lt;br /&gt;
          o Liquid layout with percentages.&lt;br /&gt;
          o Fixed layout using pixel dimensions.&lt;br /&gt;
&lt;br /&gt;
== Bausteine für die CSS - Navigation ==&lt;br /&gt;
ToDo Bilder machen&lt;br /&gt;
&lt;br /&gt;
Tipp ein umschließendes Div mit Klassen wie .nav-v, .nav-h etc. um die Code-Schnipsel leicht einbinden zu können&lt;br /&gt;
=== CSS-Navigation: Vertikale Liste ===&lt;br /&gt;
Beispiel 1 (basierend auf TYPO3)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.nav-v {&lt;br /&gt;
&lt;br /&gt;
	float:left;&lt;br /&gt;
	margin:0 0 0 -50px;&lt;br /&gt;
	padding:0;&lt;br /&gt;
}&lt;br /&gt;
.nav-v #nav-sub{&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
.nav-v ul {&lt;br /&gt;
/*padding:0 0 10px 0;*/&lt;br /&gt;
/*ie8..*/&lt;br /&gt;
float: left;&lt;br /&gt;
width:180px;&lt;br /&gt;
background: url(&amp;quot;../media/nav-divider.png&amp;quot;);&lt;br /&gt;
background-repeat: no-repeat;&lt;br /&gt;
background-position: bottom;&lt;br /&gt;
/*padding-bottom: 1px;*/&lt;br /&gt;
font-size: 12px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-v li.first{&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-v li {&lt;br /&gt;
	background: url(&amp;quot;../media/nav-divider.png&amp;quot;);&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	font-weight:normal;&lt;br /&gt;
	list-style-position:outside;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	/* ie8 */&lt;br /&gt;
	width:180px;&lt;br /&gt;
	float: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-v li.last {&lt;br /&gt;
margin-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-v li a {&lt;br /&gt;
display:block;&lt;br /&gt;
height: 23px;&lt;br /&gt;
line-height:23px;&lt;br /&gt;
text-decoration:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.nav-v li a, &lt;br /&gt;
.nav-v li a{&lt;br /&gt;
color: #333;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-v li a:hover,&lt;br /&gt;
.nav-v li.cur a,&lt;br /&gt;
.nav-v li.act a&lt;br /&gt;
{&lt;br /&gt;
color: #FFF;&lt;br /&gt;
background: url(&amp;quot;../media/bg-over.png&amp;quot;);&lt;br /&gt;
background-repeat: no-repeat;&lt;br /&gt;
background-position: 0 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Level 2 */&lt;br /&gt;
.nav-v ul ul{&lt;br /&gt;
	padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.nav-v li li {&lt;br /&gt;
	display: inline;&lt;br /&gt;
	font-size:11px;&lt;br /&gt;
	/* ie8 */&lt;br /&gt;
	border-bottom: 0px; &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
.nav-v li li a{&lt;br /&gt;
	border-top: 1px dotted #e4e5e6;&lt;br /&gt;
	background:#014674;&lt;br /&gt;
	height: 24px;&lt;br /&gt;
	line-height: 24px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-v li.act li a,&lt;br /&gt;
.nav-v li.cur li a{&lt;br /&gt;
	color:#e4e5e6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-v li li a:hover, &lt;br /&gt;
.nav-v li li.cur a:visited,&lt;br /&gt;
.nav-v li li.cur a:link&lt;br /&gt;
{&lt;br /&gt;
	color: #FFF;&lt;br /&gt;
}&lt;br /&gt;
.nav-v li li.act a:visited,&lt;br /&gt;
.nav-v li li.act a:link{&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-v li li.act {&lt;br /&gt;
}&lt;br /&gt;
.nav-v li li.act a:link, &lt;br /&gt;
.nav-v li li.act a:visited {&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== CSS-Navigation: Horizontale Liste ===&lt;br /&gt;
Beispiel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CSS-Navi: Verschachtelte Rollover Liste===&lt;br /&gt;
aus: http://css.maxdesign.com.au/&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HTML&lt;br /&gt;
&amp;lt;div id=&amp;quot;navcontainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ul id=&amp;quot;navlist&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li id=&amp;quot;active&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot; id=&amp;quot;current&amp;quot;&amp;gt;Item one&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;ul id=&amp;quot;subnavlist&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li id=&amp;quot;subactive&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot; id=&amp;quot;subcurrent&amp;quot;&amp;gt;Subitem one&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Subitem two&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Subitem three&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Subitem four&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Item two&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Item three&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Item four&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CSS&lt;br /&gt;
#navcontainer { margin-left: 30px; }&lt;br /&gt;
&lt;br /&gt;
#navcontainer ul&lt;br /&gt;
{&lt;br /&gt;
margin: 0;&lt;br /&gt;
padding: 0;&lt;br /&gt;
list-style-type: none;&lt;br /&gt;
font-family: verdana, arial, Helvetica, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#navcontainer li { margin: 0 0 1px 0; }&lt;br /&gt;
&lt;br /&gt;
#navcontainer a&lt;br /&gt;
{&lt;br /&gt;
display: block;&lt;br /&gt;
padding: 5px 10px;&lt;br /&gt;
width: 140px;&lt;br /&gt;
color: #fff;&lt;br /&gt;
background-color: #036;&lt;br /&gt;
text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#navcontainer a:hover&lt;br /&gt;
{&lt;br /&gt;
color: #fff;&lt;br /&gt;
background-color: #69C;&lt;br /&gt;
text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#navcontainer ul ul li { margin: 0 0 1px 0; }&lt;br /&gt;
&lt;br /&gt;
#navcontainer ul ul a&lt;br /&gt;
{&lt;br /&gt;
display: block;&lt;br /&gt;
padding: 5px 5px 5px 30px;&lt;br /&gt;
width: 125px;&lt;br /&gt;
color: #fff;&lt;br /&gt;
background-color: #369;&lt;br /&gt;
text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#navcontainer ul ul a:hover&lt;br /&gt;
{&lt;br /&gt;
color: #fff;&lt;br /&gt;
background-color: #69C;&lt;br /&gt;
text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ABOUT THE CODE&lt;br /&gt;
Some lists within the Listamatic site had to be modified so that they could work on Listamatic&amp;#039;s simple list model. When in doubt, use the external resource first, or at least compare both models to see which one suits your needs.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In Anlehnukng an YAML werden die Dateien möglichst Modular vorgehalten und über ein Zentrales Sylesheet eingebunden&lt;br /&gt;
&lt;br /&gt;
== Konzept-Richtlinien ==&lt;br /&gt;
ToDo - evt. verwerfen erhalten bleibt das Konzept BAukastenmäßig das CSS zu verteilen. Evt. so daß man für sich funkionsfähige Skripte macht und diese durch einen Div Wrap später auf den Bereich beschränkt wo sie eingesetzt werden.&lt;br /&gt;
=== Struktur ===&lt;br /&gt;
/main.css&lt;br /&gt;
ToDo&lt;br /&gt;
&lt;br /&gt;
== Zentrales Stylesheet base.css==&lt;br /&gt;
&lt;br /&gt;
Hier werden die verschiedenen benötigten Dateien eingebunden und einige Grundeinstellungen definiert.&lt;br /&gt;
In einer späteren Ausbaustufe werden diese evt. ebenfalls ausgelagert&lt;br /&gt;
In Typo3 Projekten könnten die CSS-Dateien auch über TypoScript eingebunden werden dann entfällt die base.css&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
### &amp;quot;CSS-Baukasten (c)2006 Stephan Schlegel&amp;quot; ###&lt;br /&gt;
### Version: 0.1&lt;br /&gt;
### Datei       : base.css&lt;br /&gt;
### Funktion    : Zentrales Stylesheet, Grundeinstellungen + Einbindung der CSS-Module&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
@import url(main/base.css);&lt;br /&gt;
@import url(mods/basemod.css);&lt;br /&gt;
@import url(mods/basemod_layout_xcol_xyz.css);&lt;br /&gt;
@import url(navi/nav_slidingdoor.css);&lt;br /&gt;
@import url(main/content.css);&lt;br /&gt;
@import url(print/print_003.css);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=CSS_-_Baukasten&amp;diff=25389</id>
		<title>CSS - Baukasten</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=CSS_-_Baukasten&amp;diff=25389"/>
		<updated>2021-08-17T15:35:29Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: /* CSS - Font Starter 2020 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Alt ! Siehe auch [[CSS - Snippets]]&lt;br /&gt;
Ziel des Abschnittes CSS-Baukasten ist es verschiedene CSS-Skripte vorzuhalten, die für verschiedene Projekte eingesetzt werden können.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
&lt;br /&gt;
[[CSS - Tipps &amp;amp; Tricks]]&lt;br /&gt;
&lt;br /&gt;
[[CSS - Snippets]]&lt;br /&gt;
== Standard Layouts ==&lt;br /&gt;
&lt;br /&gt;
=== CSS - Font Starter 2020 ===&lt;br /&gt;
Gute Größen für Fonts (html base size 16px). Von Vice übernommen. Evtl. ist normale Schrift etwas klein auf Retina.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--color-primary: black;&lt;br /&gt;
--color-accent: black;&lt;br /&gt;
--font-family-hed: VICE Grotesk, Helvetica Neue World, Helvetica Neue, Helvetica, Arial, sans-serif;&lt;br /&gt;
--font-weight-hed-normal: 500;&lt;br /&gt;
--font-weight-hed-bold: 900;&lt;br /&gt;
--line-height-hed-tight: 1;&lt;br /&gt;
--line-height-hed-normal: 1.3;&lt;br /&gt;
--line-height-hed-loose: 1.7;&lt;br /&gt;
--font-family-dek: VICE Grotesk, Helvetica Neue World, Helvetica Neue, Helvetica, Arial, sans-serif;&lt;br /&gt;
--font-weight-dek-normal: 400;&lt;br /&gt;
--font-weight-dek-bold: 700;&lt;br /&gt;
--line-height-dek-tight: 1;&lt;br /&gt;
--line-height-dek-normal: 1.3;&lt;br /&gt;
--line-height-dek-loose: 1.7;&lt;br /&gt;
--font-family-accent: Source Code Pro, Monaco, monospace;&lt;br /&gt;
--font-weight-accent-normal: 400;&lt;br /&gt;
--font-weight-accent-bold: 700;&lt;br /&gt;
--line-height-accent-tight: 1;&lt;br /&gt;
--line-height-accent-normal: 1.3;&lt;br /&gt;
--line-height-accent-loose: 1.7;&lt;br /&gt;
--font-family-body: Lora, Georgia, serif;&lt;br /&gt;
--font-weight-body-normal: 400;&lt;br /&gt;
--font-weight-body-bold: 700;&lt;br /&gt;
--line-height-body-tight: 1;&lt;br /&gt;
--line-height-body-normal: 1.3;&lt;br /&gt;
--line-height-body-loose: 1.7;&lt;br /&gt;
--font-size-h1: 3.125rem;&lt;br /&gt;
--font-size-h2: 2rem;&lt;br /&gt;
--font-size-h3: 1.25rem;&lt;br /&gt;
--font-size-h4: 1rem;&lt;br /&gt;
--font-size-h5: 0.8125rem;&lt;br /&gt;
--font-size-h6: 0.6875rem;&lt;br /&gt;
--font-size-body: 1.125rem;&lt;br /&gt;
--font-size-dropcap: 3.75rem;&lt;br /&gt;
--line-height-dropcap: 2.6875rem;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OLD STUFF ===&lt;br /&gt;
[[Typo3 Standard-CSS mit YUI]]&lt;br /&gt;
&lt;br /&gt;
== CSS-Grid Systeme / CSS-Frameworks ==&lt;br /&gt;
=== Frameworks 2015 ===&lt;br /&gt;
==== Big ====&lt;br /&gt;
Bootstrap, Foundation, Grumby&lt;br /&gt;
==== Small ====&lt;br /&gt;
Pure.css, Skeleton, Cardinal, Base, KnaCSS, &lt;br /&gt;
=== Links ===&lt;br /&gt;
http://www.tripwiremagazine.com/2009/06/45-css-grid-systems-layout-generators-and-tutorials-that-every-designer-should-know.html&lt;br /&gt;
&lt;br /&gt;
hiervon sind die engl. Beschreibungen&lt;br /&gt;
&lt;br /&gt;
=== 1140 grid ===&lt;br /&gt;
* optimiert für 1280px&lt;br /&gt;
* skaliert bei kleineren Bildschirmen (inkl. Bilder)&lt;br /&gt;
* css3 queries sorgen dafür, daß es bei smartphones funktioniert&lt;br /&gt;
&lt;br /&gt;
http://cssgrid.net/&lt;br /&gt;
&lt;br /&gt;
=== YUI Yahoo User Interface ===&lt;br /&gt;
&lt;br /&gt;
=== 960gs ===&lt;br /&gt;
CSS Framework that worth a look. The download includes templates for Fireworks, Photoshops, Inkscape and etc. so that you can start designing your web template immediately. The PSD file that comes with guides ready save designers a lot of time.&lt;br /&gt;
&lt;br /&gt;
=== Blueprint ===&lt;br /&gt;
Blueprint: A CSS Framework&lt;br /&gt;
&lt;br /&gt;
Blueprint includes a CSS reset that eliminates the discrepancies across different browsers. There are a lot of external tools and templates to aid your web development with Blueprint. See some live Demos&lt;br /&gt;
http://www.blueprintcss.org/tests/&lt;br /&gt;
&lt;br /&gt;
=== YAML ===&lt;br /&gt;
YAML is another bulletproof CSS Framework that has a very good documentation. You can easily get started by downloading the PDF documentation and the sample project from the official site. There are some tools that will help you on your development too. For example, the YAML Builder can visually create YAML-based CSS layouts.&lt;br /&gt;
=== Tripoli Framework ===&lt;br /&gt;
&lt;br /&gt;
Tripoli had been tested and supports virtually all available browsers, including IE5! It comes with some base files, and some plugins such as “Layout”, “Visual”, “Type”, and “Negative”. Tripoli completly resets all default browser standards and rebuilds them quietly with modern web development in mind.&lt;br /&gt;
&lt;br /&gt;
Tripoli is not a CSS framework. It doesn’t tell you how to code your web site. Instead, it forms a solid HTML rendering engine and a base for creating dynamic layouts without interfering with typographic measurements.&lt;br /&gt;
&lt;br /&gt;
=== BlueTrip ===&lt;br /&gt;
&lt;br /&gt;
BlueTrip is a full featured and beautiful framework that combines advantages from different CSS Framework. The official site has a complete Documentation and Demos.&lt;br /&gt;
&lt;br /&gt;
Blueprint: A CSS Framework&lt;br /&gt;
&lt;br /&gt;
Blueprint includes a CSS reset that eliminates the discrepancies across different browsers. There are a lot of external tools and templates to aid your web development with Blueprint. See some live Demos&lt;br /&gt;
&lt;br /&gt;
=== 960 Grid System ===&lt;br /&gt;
&lt;br /&gt;
[[960 Grid System (960gs)]]&lt;br /&gt;
&lt;br /&gt;
CSS Framework that worth a look. The download includes templates for Fireworks, Photoshops, Inkscape and etc. so that you can start designing your web template immediately. The PSD file that comes with guides ready save designers a lot of time.&lt;br /&gt;
&lt;br /&gt;
=== Tripoli Framework ===&lt;br /&gt;
&lt;br /&gt;
Tripoli had been tested and supports virtually all available browsers, including IE5! It comes with some base files, and some plugins such as “Layout”, “Visual”, “Type”, and “Negative”. Tripoli completly resets all default browser standards and rebuilds them quietly with modern web development in mind.&lt;br /&gt;
&lt;br /&gt;
Tripoli is not a CSS framework. It doesn’t tell you how to code your web site. Instead, it forms a solid HTML rendering engine and a base for creating dynamic layouts without interfering with typographic measurements.&lt;br /&gt;
&lt;br /&gt;
=== YAML – Yet Another Multicolumn Layout ===&lt;br /&gt;
&lt;br /&gt;
YAML is another bulletproof CSS Framework that has a very good documentation. You can easily get started by downloading the PDF documentation and the sample project from the official site. There are some tools that will help you on your development too. For example, the YAML Builder can visually create YAML-based CSS layouts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BlueTrip ===&lt;br /&gt;
&lt;br /&gt;
BlueTrip is a full featured and beautiful framework that combines advantages from different CSS Framework. The official site has a complete Documentation and Demos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== YUI Grid CSS ===&lt;br /&gt;
&lt;br /&gt;
YUI Grids CSS support fluid-width layouts as well as fixed-width layouts. This is the advantage of YUI Grids CSS over the other CSS Frameworks. To get started with YUI Grids CSS, you can download the cheat sheet and YUI Grids Builder from the official site.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Elastic CSS Framework ===&lt;br /&gt;
&lt;br /&gt;
Elastic provides a declarative language to define the layout structure and behavior. This is a young framework, and the best site to demo the usage of Elastic is the official site itself. The Elastic CSS Framework has a lot of classes and helpers that will aid in the process of webdesign.&lt;br /&gt;
&lt;br /&gt;
=== SenCSS ===&lt;br /&gt;
&lt;br /&gt;
SenCSS doesn’t include a layout system, but it does provide other things such as baseline, fonts, paddings, margins and more. It comes with a commented version and a minified version which suitable for production use.&lt;br /&gt;
&lt;br /&gt;
=== The Golden Grid ===&lt;br /&gt;
&lt;br /&gt;
The Golden Grid is a web grid system. It ‘s a product of the search for the perfect modern grid system. It ‘s meant to be a CSS tool for grid based web sites.&lt;br /&gt;
&lt;br /&gt;
=== Content With Style ===&lt;br /&gt;
&lt;br /&gt;
This is a fixed width layout and the zip files contains a few layouts such as vertical navigation with 1 content column, vertical navigation with 2 content columns, and etc.&lt;br /&gt;
&lt;br /&gt;
===CSS-boilerplate===&lt;br /&gt;
&lt;br /&gt;
As one of the original authors of Blueprint CSS I’ve decided to re-factor my ideas into a stripped down framework which provides the bare essentials to begin any project. This framework will be lite and strive not to suggest un-semantic naming conventions. You’re the designer and your craft is important.&lt;br /&gt;
&lt;br /&gt;
=== Typogridphy ===&lt;br /&gt;
&lt;br /&gt;
Typogridphy is a CSS framework constructed to allow web designers and front-end developers to quickly code typograhically pleasing grid layouts.&lt;br /&gt;
&lt;br /&gt;
Based on the popular 960 Grid System, Typogridphy allows you to create grid layouts which are versatile and great looking. Typogridphy is made of fully validate, semantic and strict xHTML, and validate CSS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logicss ===&lt;br /&gt;
The Logic CSS framework is a collection of CSS files and a toolset designed to cut development times for web-standards compliant web layouts and templates.&lt;br /&gt;
&lt;br /&gt;
    * Common cross-browser rendering behavior approach (not a reset).&lt;br /&gt;
    * Beautiful font stacks.&lt;br /&gt;
    * Typography with text resizing capabilities and vertical baseline/rhythm.&lt;br /&gt;
    * Three totally flexible layout grid templates, customizable with the toolset.&lt;br /&gt;
          o Elastic layout using EMs.&lt;br /&gt;
          o Liquid layout with percentages.&lt;br /&gt;
          o Fixed layout using pixel dimensions.&lt;br /&gt;
&lt;br /&gt;
== Bausteine für die CSS - Navigation ==&lt;br /&gt;
ToDo Bilder machen&lt;br /&gt;
&lt;br /&gt;
Tipp ein umschließendes Div mit Klassen wie .nav-v, .nav-h etc. um die Code-Schnipsel leicht einbinden zu können&lt;br /&gt;
=== CSS-Navigation: Vertikale Liste ===&lt;br /&gt;
Beispiel 1 (basierend auf TYPO3)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.nav-v {&lt;br /&gt;
&lt;br /&gt;
	float:left;&lt;br /&gt;
	margin:0 0 0 -50px;&lt;br /&gt;
	padding:0;&lt;br /&gt;
}&lt;br /&gt;
.nav-v #nav-sub{&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
.nav-v ul {&lt;br /&gt;
/*padding:0 0 10px 0;*/&lt;br /&gt;
/*ie8..*/&lt;br /&gt;
float: left;&lt;br /&gt;
width:180px;&lt;br /&gt;
background: url(&amp;quot;../media/nav-divider.png&amp;quot;);&lt;br /&gt;
background-repeat: no-repeat;&lt;br /&gt;
background-position: bottom;&lt;br /&gt;
/*padding-bottom: 1px;*/&lt;br /&gt;
font-size: 12px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-v li.first{&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-v li {&lt;br /&gt;
	background: url(&amp;quot;../media/nav-divider.png&amp;quot;);&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	font-weight:normal;&lt;br /&gt;
	list-style-position:outside;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	/* ie8 */&lt;br /&gt;
	width:180px;&lt;br /&gt;
	float: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-v li.last {&lt;br /&gt;
margin-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-v li a {&lt;br /&gt;
display:block;&lt;br /&gt;
height: 23px;&lt;br /&gt;
line-height:23px;&lt;br /&gt;
text-decoration:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.nav-v li a, &lt;br /&gt;
.nav-v li a{&lt;br /&gt;
color: #333;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-v li a:hover,&lt;br /&gt;
.nav-v li.cur a,&lt;br /&gt;
.nav-v li.act a&lt;br /&gt;
{&lt;br /&gt;
color: #FFF;&lt;br /&gt;
background: url(&amp;quot;../media/bg-over.png&amp;quot;);&lt;br /&gt;
background-repeat: no-repeat;&lt;br /&gt;
background-position: 0 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Level 2 */&lt;br /&gt;
.nav-v ul ul{&lt;br /&gt;
	padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.nav-v li li {&lt;br /&gt;
	display: inline;&lt;br /&gt;
	font-size:11px;&lt;br /&gt;
	/* ie8 */&lt;br /&gt;
	border-bottom: 0px; &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
.nav-v li li a{&lt;br /&gt;
	border-top: 1px dotted #e4e5e6;&lt;br /&gt;
	background:#014674;&lt;br /&gt;
	height: 24px;&lt;br /&gt;
	line-height: 24px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-v li.act li a,&lt;br /&gt;
.nav-v li.cur li a{&lt;br /&gt;
	color:#e4e5e6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-v li li a:hover, &lt;br /&gt;
.nav-v li li.cur a:visited,&lt;br /&gt;
.nav-v li li.cur a:link&lt;br /&gt;
{&lt;br /&gt;
	color: #FFF;&lt;br /&gt;
}&lt;br /&gt;
.nav-v li li.act a:visited,&lt;br /&gt;
.nav-v li li.act a:link{&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-v li li.act {&lt;br /&gt;
}&lt;br /&gt;
.nav-v li li.act a:link, &lt;br /&gt;
.nav-v li li.act a:visited {&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== CSS-Navigation: Horizontale Liste ===&lt;br /&gt;
Beispiel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CSS-Navi: Verschachtelte Rollover Liste===&lt;br /&gt;
aus: http://css.maxdesign.com.au/&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HTML&lt;br /&gt;
&amp;lt;div id=&amp;quot;navcontainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ul id=&amp;quot;navlist&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li id=&amp;quot;active&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot; id=&amp;quot;current&amp;quot;&amp;gt;Item one&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;ul id=&amp;quot;subnavlist&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li id=&amp;quot;subactive&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot; id=&amp;quot;subcurrent&amp;quot;&amp;gt;Subitem one&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Subitem two&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Subitem three&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Subitem four&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Item two&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Item three&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Item four&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CSS&lt;br /&gt;
#navcontainer { margin-left: 30px; }&lt;br /&gt;
&lt;br /&gt;
#navcontainer ul&lt;br /&gt;
{&lt;br /&gt;
margin: 0;&lt;br /&gt;
padding: 0;&lt;br /&gt;
list-style-type: none;&lt;br /&gt;
font-family: verdana, arial, Helvetica, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#navcontainer li { margin: 0 0 1px 0; }&lt;br /&gt;
&lt;br /&gt;
#navcontainer a&lt;br /&gt;
{&lt;br /&gt;
display: block;&lt;br /&gt;
padding: 5px 10px;&lt;br /&gt;
width: 140px;&lt;br /&gt;
color: #fff;&lt;br /&gt;
background-color: #036;&lt;br /&gt;
text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#navcontainer a:hover&lt;br /&gt;
{&lt;br /&gt;
color: #fff;&lt;br /&gt;
background-color: #69C;&lt;br /&gt;
text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#navcontainer ul ul li { margin: 0 0 1px 0; }&lt;br /&gt;
&lt;br /&gt;
#navcontainer ul ul a&lt;br /&gt;
{&lt;br /&gt;
display: block;&lt;br /&gt;
padding: 5px 5px 5px 30px;&lt;br /&gt;
width: 125px;&lt;br /&gt;
color: #fff;&lt;br /&gt;
background-color: #369;&lt;br /&gt;
text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#navcontainer ul ul a:hover&lt;br /&gt;
{&lt;br /&gt;
color: #fff;&lt;br /&gt;
background-color: #69C;&lt;br /&gt;
text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ABOUT THE CODE&lt;br /&gt;
Some lists within the Listamatic site had to be modified so that they could work on Listamatic&amp;#039;s simple list model. When in doubt, use the external resource first, or at least compare both models to see which one suits your needs.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In Anlehnukng an YAML werden die Dateien möglichst Modular vorgehalten und über ein Zentrales Sylesheet eingebunden&lt;br /&gt;
&lt;br /&gt;
== Konzept-Richtlinien ==&lt;br /&gt;
ToDo - evt. verwerfen erhalten bleibt das Konzept BAukastenmäßig das CSS zu verteilen. Evt. so daß man für sich funkionsfähige Skripte macht und diese durch einen Div Wrap später auf den Bereich beschränkt wo sie eingesetzt werden.&lt;br /&gt;
=== Struktur ===&lt;br /&gt;
/main.css&lt;br /&gt;
ToDo&lt;br /&gt;
&lt;br /&gt;
== Zentrales Stylesheet base.css==&lt;br /&gt;
&lt;br /&gt;
Hier werden die verschiedenen benötigten Dateien eingebunden und einige Grundeinstellungen definiert.&lt;br /&gt;
In einer späteren Ausbaustufe werden diese evt. ebenfalls ausgelagert&lt;br /&gt;
In Typo3 Projekten könnten die CSS-Dateien auch über TypoScript eingebunden werden dann entfällt die base.css&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
### &amp;quot;CSS-Baukasten (c)2006 Stephan Schlegel&amp;quot; ###&lt;br /&gt;
### Version: 0.1&lt;br /&gt;
### Datei       : base.css&lt;br /&gt;
### Funktion    : Zentrales Stylesheet, Grundeinstellungen + Einbindung der CSS-Module&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
@import url(main/base.css);&lt;br /&gt;
@import url(mods/basemod.css);&lt;br /&gt;
@import url(mods/basemod_layout_xcol_xyz.css);&lt;br /&gt;
@import url(navi/nav_slidingdoor.css);&lt;br /&gt;
@import url(main/content.css);&lt;br /&gt;
@import url(print/print_003.css);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=CSS_-_Baukasten&amp;diff=25388</id>
		<title>CSS - Baukasten</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=CSS_-_Baukasten&amp;diff=25388"/>
		<updated>2021-08-17T15:28:55Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: /* Standard Layouts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Alt ! Siehe auch [[CSS - Snippets]]&lt;br /&gt;
Ziel des Abschnittes CSS-Baukasten ist es verschiedene CSS-Skripte vorzuhalten, die für verschiedene Projekte eingesetzt werden können.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
&lt;br /&gt;
[[CSS - Tipps &amp;amp; Tricks]]&lt;br /&gt;
&lt;br /&gt;
[[CSS - Snippets]]&lt;br /&gt;
== Standard Layouts ==&lt;br /&gt;
&lt;br /&gt;
=== CSS - Font Starter 2020 ===&lt;br /&gt;
Gute Größen für Fonts (html base size 16px. Von Vice übernommen. Evtl. ist normale Schrift etwas klein auf Retina.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--color-primary: black;&lt;br /&gt;
--color-accent: black;&lt;br /&gt;
--font-family-hed: VICE Grotesk, Helvetica Neue World, Helvetica Neue, Helvetica, Arial, sans-serif;&lt;br /&gt;
--font-weight-hed-normal: 500;&lt;br /&gt;
--font-weight-hed-bold: 900;&lt;br /&gt;
--line-height-hed-tight: 1;&lt;br /&gt;
--line-height-hed-normal: 1.3;&lt;br /&gt;
--line-height-hed-loose: 1.7;&lt;br /&gt;
--font-family-dek: VICE Grotesk, Helvetica Neue World, Helvetica Neue, Helvetica, Arial, sans-serif;&lt;br /&gt;
--font-weight-dek-normal: 400;&lt;br /&gt;
--font-weight-dek-bold: 700;&lt;br /&gt;
--line-height-dek-tight: 1;&lt;br /&gt;
--line-height-dek-normal: 1.3;&lt;br /&gt;
--line-height-dek-loose: 1.7;&lt;br /&gt;
--font-family-accent: Source Code Pro, Monaco, monospace;&lt;br /&gt;
--font-weight-accent-normal: 400;&lt;br /&gt;
--font-weight-accent-bold: 700;&lt;br /&gt;
--line-height-accent-tight: 1;&lt;br /&gt;
--line-height-accent-normal: 1.3;&lt;br /&gt;
--line-height-accent-loose: 1.7;&lt;br /&gt;
--font-family-body: Lora, Georgia, serif;&lt;br /&gt;
--font-weight-body-normal: 400;&lt;br /&gt;
--font-weight-body-bold: 700;&lt;br /&gt;
--line-height-body-tight: 1;&lt;br /&gt;
--line-height-body-normal: 1.3;&lt;br /&gt;
--line-height-body-loose: 1.7;&lt;br /&gt;
--font-size-h1: 3.125rem;&lt;br /&gt;
--font-size-h2: 2rem;&lt;br /&gt;
--font-size-h3: 1.25rem;&lt;br /&gt;
--font-size-h4: 1rem;&lt;br /&gt;
--font-size-h5: 0.8125rem;&lt;br /&gt;
--font-size-h6: 0.6875rem;&lt;br /&gt;
--font-size-body: 1.125rem;&lt;br /&gt;
--font-size-dropcap: 3.75rem;&lt;br /&gt;
--line-height-dropcap: 2.6875rem;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== OLD STUFF ===&lt;br /&gt;
[[Typo3 Standard-CSS mit YUI]]&lt;br /&gt;
&lt;br /&gt;
== CSS-Grid Systeme / CSS-Frameworks ==&lt;br /&gt;
=== Frameworks 2015 ===&lt;br /&gt;
==== Big ====&lt;br /&gt;
Bootstrap, Foundation, Grumby&lt;br /&gt;
==== Small ====&lt;br /&gt;
Pure.css, Skeleton, Cardinal, Base, KnaCSS, &lt;br /&gt;
=== Links ===&lt;br /&gt;
http://www.tripwiremagazine.com/2009/06/45-css-grid-systems-layout-generators-and-tutorials-that-every-designer-should-know.html&lt;br /&gt;
&lt;br /&gt;
hiervon sind die engl. Beschreibungen&lt;br /&gt;
&lt;br /&gt;
=== 1140 grid ===&lt;br /&gt;
* optimiert für 1280px&lt;br /&gt;
* skaliert bei kleineren Bildschirmen (inkl. Bilder)&lt;br /&gt;
* css3 queries sorgen dafür, daß es bei smartphones funktioniert&lt;br /&gt;
&lt;br /&gt;
http://cssgrid.net/&lt;br /&gt;
&lt;br /&gt;
=== YUI Yahoo User Interface ===&lt;br /&gt;
&lt;br /&gt;
=== 960gs ===&lt;br /&gt;
CSS Framework that worth a look. The download includes templates for Fireworks, Photoshops, Inkscape and etc. so that you can start designing your web template immediately. The PSD file that comes with guides ready save designers a lot of time.&lt;br /&gt;
&lt;br /&gt;
=== Blueprint ===&lt;br /&gt;
Blueprint: A CSS Framework&lt;br /&gt;
&lt;br /&gt;
Blueprint includes a CSS reset that eliminates the discrepancies across different browsers. There are a lot of external tools and templates to aid your web development with Blueprint. See some live Demos&lt;br /&gt;
http://www.blueprintcss.org/tests/&lt;br /&gt;
&lt;br /&gt;
=== YAML ===&lt;br /&gt;
YAML is another bulletproof CSS Framework that has a very good documentation. You can easily get started by downloading the PDF documentation and the sample project from the official site. There are some tools that will help you on your development too. For example, the YAML Builder can visually create YAML-based CSS layouts.&lt;br /&gt;
=== Tripoli Framework ===&lt;br /&gt;
&lt;br /&gt;
Tripoli had been tested and supports virtually all available browsers, including IE5! It comes with some base files, and some plugins such as “Layout”, “Visual”, “Type”, and “Negative”. Tripoli completly resets all default browser standards and rebuilds them quietly with modern web development in mind.&lt;br /&gt;
&lt;br /&gt;
Tripoli is not a CSS framework. It doesn’t tell you how to code your web site. Instead, it forms a solid HTML rendering engine and a base for creating dynamic layouts without interfering with typographic measurements.&lt;br /&gt;
&lt;br /&gt;
=== BlueTrip ===&lt;br /&gt;
&lt;br /&gt;
BlueTrip is a full featured and beautiful framework that combines advantages from different CSS Framework. The official site has a complete Documentation and Demos.&lt;br /&gt;
&lt;br /&gt;
Blueprint: A CSS Framework&lt;br /&gt;
&lt;br /&gt;
Blueprint includes a CSS reset that eliminates the discrepancies across different browsers. There are a lot of external tools and templates to aid your web development with Blueprint. See some live Demos&lt;br /&gt;
&lt;br /&gt;
=== 960 Grid System ===&lt;br /&gt;
&lt;br /&gt;
[[960 Grid System (960gs)]]&lt;br /&gt;
&lt;br /&gt;
CSS Framework that worth a look. The download includes templates for Fireworks, Photoshops, Inkscape and etc. so that you can start designing your web template immediately. The PSD file that comes with guides ready save designers a lot of time.&lt;br /&gt;
&lt;br /&gt;
=== Tripoli Framework ===&lt;br /&gt;
&lt;br /&gt;
Tripoli had been tested and supports virtually all available browsers, including IE5! It comes with some base files, and some plugins such as “Layout”, “Visual”, “Type”, and “Negative”. Tripoli completly resets all default browser standards and rebuilds them quietly with modern web development in mind.&lt;br /&gt;
&lt;br /&gt;
Tripoli is not a CSS framework. It doesn’t tell you how to code your web site. Instead, it forms a solid HTML rendering engine and a base for creating dynamic layouts without interfering with typographic measurements.&lt;br /&gt;
&lt;br /&gt;
=== YAML – Yet Another Multicolumn Layout ===&lt;br /&gt;
&lt;br /&gt;
YAML is another bulletproof CSS Framework that has a very good documentation. You can easily get started by downloading the PDF documentation and the sample project from the official site. There are some tools that will help you on your development too. For example, the YAML Builder can visually create YAML-based CSS layouts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BlueTrip ===&lt;br /&gt;
&lt;br /&gt;
BlueTrip is a full featured and beautiful framework that combines advantages from different CSS Framework. The official site has a complete Documentation and Demos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== YUI Grid CSS ===&lt;br /&gt;
&lt;br /&gt;
YUI Grids CSS support fluid-width layouts as well as fixed-width layouts. This is the advantage of YUI Grids CSS over the other CSS Frameworks. To get started with YUI Grids CSS, you can download the cheat sheet and YUI Grids Builder from the official site.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Elastic CSS Framework ===&lt;br /&gt;
&lt;br /&gt;
Elastic provides a declarative language to define the layout structure and behavior. This is a young framework, and the best site to demo the usage of Elastic is the official site itself. The Elastic CSS Framework has a lot of classes and helpers that will aid in the process of webdesign.&lt;br /&gt;
&lt;br /&gt;
=== SenCSS ===&lt;br /&gt;
&lt;br /&gt;
SenCSS doesn’t include a layout system, but it does provide other things such as baseline, fonts, paddings, margins and more. It comes with a commented version and a minified version which suitable for production use.&lt;br /&gt;
&lt;br /&gt;
=== The Golden Grid ===&lt;br /&gt;
&lt;br /&gt;
The Golden Grid is a web grid system. It ‘s a product of the search for the perfect modern grid system. It ‘s meant to be a CSS tool for grid based web sites.&lt;br /&gt;
&lt;br /&gt;
=== Content With Style ===&lt;br /&gt;
&lt;br /&gt;
This is a fixed width layout and the zip files contains a few layouts such as vertical navigation with 1 content column, vertical navigation with 2 content columns, and etc.&lt;br /&gt;
&lt;br /&gt;
===CSS-boilerplate===&lt;br /&gt;
&lt;br /&gt;
As one of the original authors of Blueprint CSS I’ve decided to re-factor my ideas into a stripped down framework which provides the bare essentials to begin any project. This framework will be lite and strive not to suggest un-semantic naming conventions. You’re the designer and your craft is important.&lt;br /&gt;
&lt;br /&gt;
=== Typogridphy ===&lt;br /&gt;
&lt;br /&gt;
Typogridphy is a CSS framework constructed to allow web designers and front-end developers to quickly code typograhically pleasing grid layouts.&lt;br /&gt;
&lt;br /&gt;
Based on the popular 960 Grid System, Typogridphy allows you to create grid layouts which are versatile and great looking. Typogridphy is made of fully validate, semantic and strict xHTML, and validate CSS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logicss ===&lt;br /&gt;
The Logic CSS framework is a collection of CSS files and a toolset designed to cut development times for web-standards compliant web layouts and templates.&lt;br /&gt;
&lt;br /&gt;
    * Common cross-browser rendering behavior approach (not a reset).&lt;br /&gt;
    * Beautiful font stacks.&lt;br /&gt;
    * Typography with text resizing capabilities and vertical baseline/rhythm.&lt;br /&gt;
    * Three totally flexible layout grid templates, customizable with the toolset.&lt;br /&gt;
          o Elastic layout using EMs.&lt;br /&gt;
          o Liquid layout with percentages.&lt;br /&gt;
          o Fixed layout using pixel dimensions.&lt;br /&gt;
&lt;br /&gt;
== Bausteine für die CSS - Navigation ==&lt;br /&gt;
ToDo Bilder machen&lt;br /&gt;
&lt;br /&gt;
Tipp ein umschließendes Div mit Klassen wie .nav-v, .nav-h etc. um die Code-Schnipsel leicht einbinden zu können&lt;br /&gt;
=== CSS-Navigation: Vertikale Liste ===&lt;br /&gt;
Beispiel 1 (basierend auf TYPO3)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.nav-v {&lt;br /&gt;
&lt;br /&gt;
	float:left;&lt;br /&gt;
	margin:0 0 0 -50px;&lt;br /&gt;
	padding:0;&lt;br /&gt;
}&lt;br /&gt;
.nav-v #nav-sub{&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
.nav-v ul {&lt;br /&gt;
/*padding:0 0 10px 0;*/&lt;br /&gt;
/*ie8..*/&lt;br /&gt;
float: left;&lt;br /&gt;
width:180px;&lt;br /&gt;
background: url(&amp;quot;../media/nav-divider.png&amp;quot;);&lt;br /&gt;
background-repeat: no-repeat;&lt;br /&gt;
background-position: bottom;&lt;br /&gt;
/*padding-bottom: 1px;*/&lt;br /&gt;
font-size: 12px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-v li.first{&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-v li {&lt;br /&gt;
	background: url(&amp;quot;../media/nav-divider.png&amp;quot;);&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	font-weight:normal;&lt;br /&gt;
	list-style-position:outside;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	/* ie8 */&lt;br /&gt;
	width:180px;&lt;br /&gt;
	float: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-v li.last {&lt;br /&gt;
margin-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-v li a {&lt;br /&gt;
display:block;&lt;br /&gt;
height: 23px;&lt;br /&gt;
line-height:23px;&lt;br /&gt;
text-decoration:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.nav-v li a, &lt;br /&gt;
.nav-v li a{&lt;br /&gt;
color: #333;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-v li a:hover,&lt;br /&gt;
.nav-v li.cur a,&lt;br /&gt;
.nav-v li.act a&lt;br /&gt;
{&lt;br /&gt;
color: #FFF;&lt;br /&gt;
background: url(&amp;quot;../media/bg-over.png&amp;quot;);&lt;br /&gt;
background-repeat: no-repeat;&lt;br /&gt;
background-position: 0 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Level 2 */&lt;br /&gt;
.nav-v ul ul{&lt;br /&gt;
	padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.nav-v li li {&lt;br /&gt;
	display: inline;&lt;br /&gt;
	font-size:11px;&lt;br /&gt;
	/* ie8 */&lt;br /&gt;
	border-bottom: 0px; &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
.nav-v li li a{&lt;br /&gt;
	border-top: 1px dotted #e4e5e6;&lt;br /&gt;
	background:#014674;&lt;br /&gt;
	height: 24px;&lt;br /&gt;
	line-height: 24px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-v li.act li a,&lt;br /&gt;
.nav-v li.cur li a{&lt;br /&gt;
	color:#e4e5e6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-v li li a:hover, &lt;br /&gt;
.nav-v li li.cur a:visited,&lt;br /&gt;
.nav-v li li.cur a:link&lt;br /&gt;
{&lt;br /&gt;
	color: #FFF;&lt;br /&gt;
}&lt;br /&gt;
.nav-v li li.act a:visited,&lt;br /&gt;
.nav-v li li.act a:link{&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-v li li.act {&lt;br /&gt;
}&lt;br /&gt;
.nav-v li li.act a:link, &lt;br /&gt;
.nav-v li li.act a:visited {&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== CSS-Navigation: Horizontale Liste ===&lt;br /&gt;
Beispiel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CSS-Navi: Verschachtelte Rollover Liste===&lt;br /&gt;
aus: http://css.maxdesign.com.au/&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HTML&lt;br /&gt;
&amp;lt;div id=&amp;quot;navcontainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ul id=&amp;quot;navlist&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li id=&amp;quot;active&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot; id=&amp;quot;current&amp;quot;&amp;gt;Item one&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;ul id=&amp;quot;subnavlist&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li id=&amp;quot;subactive&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot; id=&amp;quot;subcurrent&amp;quot;&amp;gt;Subitem one&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Subitem two&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Subitem three&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Subitem four&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Item two&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Item three&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Item four&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CSS&lt;br /&gt;
#navcontainer { margin-left: 30px; }&lt;br /&gt;
&lt;br /&gt;
#navcontainer ul&lt;br /&gt;
{&lt;br /&gt;
margin: 0;&lt;br /&gt;
padding: 0;&lt;br /&gt;
list-style-type: none;&lt;br /&gt;
font-family: verdana, arial, Helvetica, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#navcontainer li { margin: 0 0 1px 0; }&lt;br /&gt;
&lt;br /&gt;
#navcontainer a&lt;br /&gt;
{&lt;br /&gt;
display: block;&lt;br /&gt;
padding: 5px 10px;&lt;br /&gt;
width: 140px;&lt;br /&gt;
color: #fff;&lt;br /&gt;
background-color: #036;&lt;br /&gt;
text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#navcontainer a:hover&lt;br /&gt;
{&lt;br /&gt;
color: #fff;&lt;br /&gt;
background-color: #69C;&lt;br /&gt;
text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#navcontainer ul ul li { margin: 0 0 1px 0; }&lt;br /&gt;
&lt;br /&gt;
#navcontainer ul ul a&lt;br /&gt;
{&lt;br /&gt;
display: block;&lt;br /&gt;
padding: 5px 5px 5px 30px;&lt;br /&gt;
width: 125px;&lt;br /&gt;
color: #fff;&lt;br /&gt;
background-color: #369;&lt;br /&gt;
text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#navcontainer ul ul a:hover&lt;br /&gt;
{&lt;br /&gt;
color: #fff;&lt;br /&gt;
background-color: #69C;&lt;br /&gt;
text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ABOUT THE CODE&lt;br /&gt;
Some lists within the Listamatic site had to be modified so that they could work on Listamatic&amp;#039;s simple list model. When in doubt, use the external resource first, or at least compare both models to see which one suits your needs.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In Anlehnukng an YAML werden die Dateien möglichst Modular vorgehalten und über ein Zentrales Sylesheet eingebunden&lt;br /&gt;
&lt;br /&gt;
== Konzept-Richtlinien ==&lt;br /&gt;
ToDo - evt. verwerfen erhalten bleibt das Konzept BAukastenmäßig das CSS zu verteilen. Evt. so daß man für sich funkionsfähige Skripte macht und diese durch einen Div Wrap später auf den Bereich beschränkt wo sie eingesetzt werden.&lt;br /&gt;
=== Struktur ===&lt;br /&gt;
/main.css&lt;br /&gt;
ToDo&lt;br /&gt;
&lt;br /&gt;
== Zentrales Stylesheet base.css==&lt;br /&gt;
&lt;br /&gt;
Hier werden die verschiedenen benötigten Dateien eingebunden und einige Grundeinstellungen definiert.&lt;br /&gt;
In einer späteren Ausbaustufe werden diese evt. ebenfalls ausgelagert&lt;br /&gt;
In Typo3 Projekten könnten die CSS-Dateien auch über TypoScript eingebunden werden dann entfällt die base.css&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
### &amp;quot;CSS-Baukasten (c)2006 Stephan Schlegel&amp;quot; ###&lt;br /&gt;
### Version: 0.1&lt;br /&gt;
### Datei       : base.css&lt;br /&gt;
### Funktion    : Zentrales Stylesheet, Grundeinstellungen + Einbindung der CSS-Module&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
@import url(main/base.css);&lt;br /&gt;
@import url(mods/basemod.css);&lt;br /&gt;
@import url(mods/basemod_layout_xcol_xyz.css);&lt;br /&gt;
@import url(navi/nav_slidingdoor.css);&lt;br /&gt;
@import url(main/content.css);&lt;br /&gt;
@import url(print/print_003.css);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Processwire_-_API&amp;diff=25387</id>
		<title>Processwire - API</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Processwire_-_API&amp;diff=25387"/>
		<updated>2021-08-15T06:42:27Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Links ==&lt;br /&gt;
 https://processwire.com/api/ref/&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Tipps ==&lt;br /&gt;
* Wenn kein Zugriff auf das Pages Objekt möglich ist kann man über wire()-&amp;gt;pages auf die Funktionen zugreifen.&lt;br /&gt;
&lt;br /&gt;
== ProcessWire API - Page Manipulation ==&lt;br /&gt;
 [[ProcessWire API - Page Manipulation]]&lt;br /&gt;
&lt;br /&gt;
== ProcessWire API Variable ==&lt;br /&gt;
ProcessWire hat einige nützliche Variablen die man ständig benötigt. Außerdem kann man außer über eine Variable auf viele Objekte auch als Funktion zugreifen.&lt;br /&gt;
Wichtig sind z.B. folgende Objekte&lt;br /&gt;
 Page&lt;br /&gt;
 Pages&lt;br /&gt;
 Config&lt;br /&gt;
 Wire&lt;br /&gt;
 User&lt;br /&gt;
=== Zugriff auf Variablen ===&lt;br /&gt;
Es gibt unterschiedliche Wege mit unterschiedlichen Vor- und Nachteilen auf API Variablen zuzugreifen.&lt;br /&gt;
 https://processwire.com/docs/start/variables/&lt;br /&gt;
&lt;br /&gt;
 $page the most common access as a variable.&lt;br /&gt;
 page() accessing as a function can be very convenient, when available.&lt;br /&gt;
 wire(&amp;#039;page&amp;#039;) This works anywhere, and with any version of ProcessWire.&lt;br /&gt;
 $this-&amp;gt;page This is how you might access it from within a Wire-derived class.&lt;br /&gt;
 $this-&amp;gt;wire(&amp;#039;page&amp;#039;) A slightly more efficient way you can access from within a Wire-derived class.&lt;br /&gt;
 $pages-&amp;gt;wire(&amp;#039;page&amp;#039;) API variables can also access all other API variables, by way of their wire() method. In this example, we are accessing the $page API variable from the $pages API variable. So if you have any one API variable, then you actually have them all.&lt;br /&gt;
&lt;br /&gt;
Accessing API variables as a function rather than a variable can be more convenient when the variable version may be out of scope, or if your IDE highlights API variables as undefined. So whenever we refer to an API variable, make note that access it however you&amp;#039;d like.&lt;br /&gt;
&lt;br /&gt;
This is just an introduction to some of ProcessWire&amp;#039;s API variables. Once you are familiar with these, you&amp;#039;ll want to use ProcessWire&amp;#039;s full API reference instead.&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Processwire_-_API&amp;diff=25386</id>
		<title>Processwire - API</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Processwire_-_API&amp;diff=25386"/>
		<updated>2021-08-15T06:40:56Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Allgemeine Tipps ==&lt;br /&gt;
* Wenn kein Zugriff auf das Pages Objekt möglich ist kann man über wire()-&amp;gt;pages auf die Funktionen zugreifen.&lt;br /&gt;
&lt;br /&gt;
== ProcessWire API - Page Manipulation ==&lt;br /&gt;
 [[ProcessWire API - Page Manipulation]]&lt;br /&gt;
&lt;br /&gt;
== ProcessWire API Variable ==&lt;br /&gt;
ProcessWire hat einige nützliche Variablen die man ständig benötigt. Außerdem kann man außer über eine Variable auf viele Objekte auch als Funktion zugreifen.&lt;br /&gt;
Wichtig sind z.B. folgende Objekte&lt;br /&gt;
 Page&lt;br /&gt;
 Pages&lt;br /&gt;
 Config&lt;br /&gt;
 Wire&lt;br /&gt;
 User&lt;br /&gt;
=== Zugriff auf Variablen ===&lt;br /&gt;
Es gibt unterschiedliche Wege mit unterschiedlichen Vor- und Nachteilen auf API Variablen zuzugreifen.&lt;br /&gt;
 https://processwire.com/docs/start/variables/&lt;br /&gt;
&lt;br /&gt;
 $page the most common access as a variable.&lt;br /&gt;
 page() accessing as a function can be very convenient, when available.&lt;br /&gt;
 wire(&amp;#039;page&amp;#039;) This works anywhere, and with any version of ProcessWire.&lt;br /&gt;
 $this-&amp;gt;page This is how you might access it from within a Wire-derived class.&lt;br /&gt;
 $this-&amp;gt;wire(&amp;#039;page&amp;#039;) A slightly more efficient way you can access from within a Wire-derived class.&lt;br /&gt;
 $pages-&amp;gt;wire(&amp;#039;page&amp;#039;) API variables can also access all other API variables, by way of their wire() method. In this example, we are accessing the $page API variable from the $pages API variable. So if you have any one API variable, then you actually have them all.&lt;br /&gt;
&lt;br /&gt;
Accessing API variables as a function rather than a variable can be more convenient when the variable version may be out of scope, or if your IDE highlights API variables as undefined. So whenever we refer to an API variable, make note that access it however you&amp;#039;d like.&lt;br /&gt;
&lt;br /&gt;
This is just an introduction to some of ProcessWire&amp;#039;s API variables. Once you are familiar with these, you&amp;#039;ll want to use ProcessWire&amp;#039;s full API reference instead.&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Field_Rendering&amp;diff=25383</id>
		<title>ProcessWire - Field Rendering</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Field_Rendering&amp;diff=25383"/>
		<updated>2021-07-22T10:15:26Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: /* Field Templates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe auch &lt;br /&gt;
 [[ProcessWire - Fields]]&lt;br /&gt;
&lt;br /&gt;
== Field Templates ==&lt;br /&gt;
 https://processwire.com/blog/posts/more-repeaters-repeater-matrix-and-new-field-rendering/&lt;br /&gt;
In Processwire kann man (zumindest ab Version 3.x) eine verbesserte render() Funktion nutzen. &lt;br /&gt;
Dabei &amp;#039;&amp;#039;&amp;#039;sucht ProcessWire automatisch&amp;#039;&amp;#039;&amp;#039; in verschiedenen Verzeichnissen nach einem passenden Template File.&lt;br /&gt;
&lt;br /&gt;
Angenommen man möchte ein Textfeld mit dem Namen &amp;quot;body&amp;quot; im Template basic_page.php rendern.&lt;br /&gt;
 echo $page-&amp;gt;render(&amp;#039;body&amp;#039;); // looks for /site/templates/fields/body.php to return markup&lt;br /&gt;
Dann sucht PW nach dem passenden Subtemplete im fields Verzeichnis.&lt;br /&gt;
&lt;br /&gt;
Ab 3.0.7 sucht Processwire außerdem in &lt;br /&gt;
 /site/templates/fields/body/basic-page.php&lt;br /&gt;
 /site/templates/fields/basic-page/body.php&lt;br /&gt;
 /site/templates/fields/body.php (default/fallback) &lt;br /&gt;
bis es eine Definition findet. Außderdem kann man jetzt auch auf einfache Art Varianten erzeugen. https://processwire.com/blog/posts/processwire-3.0.7-expands-field-rendering-page-path-history-and-more/#field-rendering-with-template-files&lt;br /&gt;
&lt;br /&gt;
== Custom Views ==&lt;br /&gt;
https://processwire.com/blog/posts/processwire-3.0.7-expands-field-rendering-page-path-history-and-more/#field-rendering-with-template-files&lt;br /&gt;
&lt;br /&gt;
Es gibt viele Möglichkeiten sehr Komplexe Setups mit Varianten aufzusetzen. Der Link oben gibt einen guten Einstieg.&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Smooth_Scrolling&amp;diff=25382</id>
		<title>JavaScript - Smooth Scrolling</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Smooth_Scrolling&amp;diff=25382"/>
		<updated>2021-07-22T06:22:16Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Es wäre so einfach mit CSS wenn es alle unterstützen würden. Edge, IE und Safari tun es stand 2020 nicht :-(&lt;br /&gt;
&lt;br /&gt;
Die unkomplizierteste Lösung für mich 2020 ist immer noch ein jQuery Snippet&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
$( document ).ready(function() {&lt;br /&gt;
	//sscroll&lt;br /&gt;
	//$(document).on(&amp;#039;click&amp;#039;, &amp;#039;.nav a[href^=&amp;quot;#&amp;quot;]&amp;#039;, function (event) {&lt;br /&gt;
    shift = 58&lt;br /&gt;
    duration = 250&lt;br /&gt;
    scrollElement = &amp;#039;a.scroll&amp;#039;&lt;br /&gt;
	$(document).on(&amp;#039;click&amp;#039;, scrollElement, function (event) {&lt;br /&gt;
		event.preventDefault();&lt;br /&gt;
		$(&amp;#039;html, body&amp;#039;).animate({&lt;br /&gt;
			scrollTop: $($.attr(this, &amp;#039;href&amp;#039;)).offset().top - shift&lt;br /&gt;
		}, duration);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Viele andere Löungen inklusive. Polyfills, haben in Safari nicht funktioniert. Eine Vanilla Lösung &lt;br /&gt;
Daher mit JavaScript (siehe auch Snippets für jQuery Lösungen).&lt;br /&gt;
&lt;br /&gt;
 https://perishablepress.com/vanilla-javascript-scroll-anchor/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More smooth scroll techniques&lt;br /&gt;
 Smooth Scroll (Vanilla JS)&lt;br /&gt;
 Smooth Scrolling (jQuery)&lt;br /&gt;
 Skinny.js (jQuery)&lt;br /&gt;
&lt;br /&gt;
== cferdinandi smooth-scroll ==&lt;br /&gt;
Eines der verbreitetsten und recht schmal ist dieses Vanilla JS&lt;br /&gt;
 https://github.com/cferdinandi/smooth-scroll&lt;br /&gt;
&lt;br /&gt;
== Only CSS Solution ==&lt;br /&gt;
Funktioniert 2021 überall außer IE und Safari (dort nur im experimental mode).&lt;br /&gt;
&lt;br /&gt;
Beispiel&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.module {&lt;br /&gt;
  scroll-behavior: [ auto | smooth ];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
More infos at CSS-Tricks and caniuse. Thanks to DKeu for the tip!&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Smooth_Scrolling&amp;diff=25381</id>
		<title>JavaScript - Smooth Scrolling</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Smooth_Scrolling&amp;diff=25381"/>
		<updated>2021-07-22T06:21:44Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Es wäre so einfach mit CSS wenn es alle unterstützen würden. Edge, IE und Safari tun es stand 2020 nicht :-(&lt;br /&gt;
&lt;br /&gt;
Die unkomplizierteste Lösung für mich 2020 ist immer noch ein jQuery Snippet&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
$( document ).ready(function() {&lt;br /&gt;
	//sscroll&lt;br /&gt;
	//$(document).on(&amp;#039;click&amp;#039;, &amp;#039;.nav a[href^=&amp;quot;#&amp;quot;]&amp;#039;, function (event) {&lt;br /&gt;
    shift = 58&lt;br /&gt;
    duration = 250&lt;br /&gt;
    scrollElement = &amp;#039;a.scroll&amp;#039;&lt;br /&gt;
	$(document).on(&amp;#039;click&amp;#039;, scrollElement, function (event) {&lt;br /&gt;
		event.preventDefault();&lt;br /&gt;
		$(&amp;#039;html, body&amp;#039;).animate({&lt;br /&gt;
			scrollTop: $($.attr(this, &amp;#039;href&amp;#039;)).offset().top - shift&lt;br /&gt;
		}, duration);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Viele andere Löungen inklusive. Polyfills, haben in Safari nicht funktioniert. Eine Vanilla Lösung &lt;br /&gt;
Daher mit JavaScript (siehe auch Snippets für jQuery Lösungen).&lt;br /&gt;
&lt;br /&gt;
 https://perishablepress.com/vanilla-javascript-scroll-anchor/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More smooth scroll techniques&lt;br /&gt;
 Smooth Scroll (Vanilla JS)&lt;br /&gt;
 Smooth Scrolling (jQuery)&lt;br /&gt;
 Skinny.js (jQuery)&lt;br /&gt;
&lt;br /&gt;
== Only CSS Solution ==&lt;br /&gt;
Funktioniert 2021 überall außer IE und Safari (dort nur im experimental mode).&lt;br /&gt;
&lt;br /&gt;
Beispiel&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.module {&lt;br /&gt;
  scroll-behavior: [ auto | smooth ];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
More infos at CSS-Tricks and caniuse. Thanks to DKeu for the tip!&lt;br /&gt;
&lt;br /&gt;
== cferdinandi smooth-scroll ==&lt;br /&gt;
Eines der verbreitetsten und recht schmal ist dieses Vanilla JS&lt;br /&gt;
 https://github.com/cferdinandi/smooth-scroll&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Smooth_Scrolling&amp;diff=25380</id>
		<title>JavaScript - Smooth Scrolling</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Smooth_Scrolling&amp;diff=25380"/>
		<updated>2021-07-22T06:20:31Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Es wäre so einfach mit CSS wenn es alle unterstützen würden. Edge, IE und Safari tun es stand 2020 nicht :-(&lt;br /&gt;
&lt;br /&gt;
Die unkomplizierteste Lösung für mich 2020 ist immer noch ein jQuery Snippet&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
$( document ).ready(function() {&lt;br /&gt;
	//sscroll&lt;br /&gt;
	//$(document).on(&amp;#039;click&amp;#039;, &amp;#039;.nav a[href^=&amp;quot;#&amp;quot;]&amp;#039;, function (event) {&lt;br /&gt;
    shift = 58&lt;br /&gt;
    duration = 250&lt;br /&gt;
    scrollElement = &amp;#039;a.scroll&amp;#039;&lt;br /&gt;
	$(document).on(&amp;#039;click&amp;#039;, scrollElement, function (event) {&lt;br /&gt;
		event.preventDefault();&lt;br /&gt;
		$(&amp;#039;html, body&amp;#039;).animate({&lt;br /&gt;
			scrollTop: $($.attr(this, &amp;#039;href&amp;#039;)).offset().top - shift&lt;br /&gt;
		}, duration);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Viele andere Löungen inklusive. Polyfills, haben in Safari nicht funktioniert. Eine Vanilla Lösung &lt;br /&gt;
Daher mit JavaScript (siehe auch Snippets für jQuery Lösungen).&lt;br /&gt;
&lt;br /&gt;
 https://perishablepress.com/vanilla-javascript-scroll-anchor/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More smooth scroll techniques&lt;br /&gt;
 Smooth Scroll (Vanilla JS)&lt;br /&gt;
 Smooth Scrolling (jQuery)&lt;br /&gt;
 Skinny.js (jQuery)&lt;br /&gt;
&lt;br /&gt;
CSS solution&lt;br /&gt;
&lt;br /&gt;
Just a heads up for latest Chrome, Firefox, or Opera, you can enable smooth scroll via the scroll-behavior property (no JS required!), for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.module {&lt;br /&gt;
  scroll-behavior: [ auto | smooth ];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
More infos at CSS-Tricks and caniuse. Thanks to DKeu for the tip!&lt;br /&gt;
&lt;br /&gt;
== cferdinandi smooth-scroll ==&lt;br /&gt;
Eines der verbreitetsten und recht schmal ist dieses Vanilla JS&lt;br /&gt;
 https://github.com/cferdinandi/smooth-scroll&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Smooth_Scrolling&amp;diff=25379</id>
		<title>JavaScript - Smooth Scrolling</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Smooth_Scrolling&amp;diff=25379"/>
		<updated>2021-07-22T06:19:34Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Es wäre so einfach mit CSS wenn es alle unterstützen würden. Edge, IE und Safari tun es stand 2020 nicht :-(&lt;br /&gt;
&lt;br /&gt;
Die unkomplizierteste Lösung für mich 2020 ist immer noch ein jQuery Snippet&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
$( document ).ready(function() {&lt;br /&gt;
	//sscroll&lt;br /&gt;
	//$(document).on(&amp;#039;click&amp;#039;, &amp;#039;.nav a[href^=&amp;quot;#&amp;quot;]&amp;#039;, function (event) {&lt;br /&gt;
    shift = 58&lt;br /&gt;
    duration = 250&lt;br /&gt;
    scrollElement = &amp;#039;a.scroll&amp;#039;&lt;br /&gt;
	$(document).on(&amp;#039;click&amp;#039;, scrollElement, function (event) {&lt;br /&gt;
		event.preventDefault();&lt;br /&gt;
		$(&amp;#039;html, body&amp;#039;).animate({&lt;br /&gt;
			scrollTop: $($.attr(this, &amp;#039;href&amp;#039;)).offset().top - shift&lt;br /&gt;
		}, duration);&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Viele andere Löungen inklusive. Polyfills, haben in Safari nicht funktioniert. Eine Vanilla Lösung &lt;br /&gt;
Daher mit JavaScript (siehe auch Snippets für jQuery Lösungen).&lt;br /&gt;
&lt;br /&gt;
 https://perishablepress.com/vanilla-javascript-scroll-anchor/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More smooth scroll techniques&lt;br /&gt;
Smooth Scroll (Vanilla JS)&lt;br /&gt;
Smooth Scrolling (jQuery)&lt;br /&gt;
Skinny.js (jQuery)&lt;br /&gt;
CSS solution&lt;br /&gt;
Just a heads up for latest Chrome, Firefox, or Opera, you can enable smooth scroll via the scroll-behavior property (no JS required!), for example:&lt;br /&gt;
&lt;br /&gt;
.module {&lt;br /&gt;
  scroll-behavior: [ auto | smooth ];&lt;br /&gt;
}&lt;br /&gt;
More infos at CSS-Tricks and caniuse. Thanks to DKeu for the tip!&lt;br /&gt;
&lt;br /&gt;
== cferdinandi smooth-scroll ==&lt;br /&gt;
Eines der verbreitetsten und recht schmal ist dieses Vanilla JS&lt;br /&gt;
 https://github.com/cferdinandi/smooth-scroll&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Page_Reference_(Field)&amp;diff=25378</id>
		<title>ProcessWire - Page Reference (Field)</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Page_Reference_(Field)&amp;diff=25378"/>
		<updated>2021-07-16T09:30:20Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: /* Überprüfe Seitenreferenz */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Page Reference Felder enthalten Verbindungen zu anderen Seiten.&lt;br /&gt;
== API Zugriff auf Page Reference ==&lt;br /&gt;
=== Einfache Beispiele ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// examples&lt;br /&gt;
$someOtherPage = $pages-&amp;gt;get(1234);&lt;br /&gt;
$page-&amp;gt;your_page_field = $someOtherPage;// @note: not sure it works in all contexts&lt;br /&gt;
$page-&amp;gt;your_page_field-&amp;gt;add($someOtherPage);&lt;br /&gt;
$page-&amp;gt;your_page_field-&amp;gt;add(1234);&lt;br /&gt;
&lt;br /&gt;
// Manipulate page reference this way...&lt;br /&gt;
$p = $pages-&amp;gt;get(1234);&lt;br /&gt;
$p-&amp;gt;of(false); // always switch of output formatting when manipulating and save back values&lt;br /&gt;
$p-&amp;gt;page_reference_field-&amp;gt;add(1111); // add another page by id&lt;br /&gt;
$p-&amp;gt;save();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finde Seiten die auf Diese zeigen ===&lt;br /&gt;
 https://processwire.com/api/ref/page/references/&lt;br /&gt;
Available since version 3.0.107.&lt;br /&gt;
&lt;br /&gt;
 // basic usage&lt;br /&gt;
 $items = $page-&amp;gt;references();&lt;br /&gt;
&lt;br /&gt;
 // usage with all arguments&lt;br /&gt;
 $items = $page-&amp;gt;references($selector = &amp;#039;&amp;#039;, $field = &amp;#039;&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
=== Komplexe Referenzierung ===&lt;br /&gt;
 https://processwire.com/talk/topic/1224-selector-and-page-reference-field/&lt;br /&gt;
Finde Seiten mit dem Template &amp;#039;&amp;#039;&amp;#039;poi&amp;#039;&amp;#039;&amp;#039; die ein Seitenreferenz auf eine Seite mit dem Titel &amp;#039;&amp;#039;&amp;#039;Zoo&amp;#039;&amp;#039;&amp;#039; haben. Das PR Feld hat den Namen poi_type&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$pr = $pages-&amp;gt;get(&amp;quot;title=Zoo&amp;quot;); // $pr enthält das Pageobjekt&lt;br /&gt;
$poi = $pages-&amp;gt;find(&amp;quot;template=poi, poi_type=$pr&amp;quot;); // Pageobjekt als Parameter für den Selektor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es kann auch ein PageArray Objekt zum Suchen genutzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$prs = $pages-&amp;gt;find(&amp;quot;title=Zoo|Theme park|Museum&amp;quot;); // maybe also use the name or id&lt;br /&gt;
$poi = $pages-&amp;gt;find(&amp;quot;template=poi, poi_type=$prs&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== PageReference in Repeater ====&lt;br /&gt;
template client enthält einen Repeater r_assignment und dieser die Seitenreferenzen pr_contact und pr_function&lt;br /&gt;
&lt;br /&gt;
pr_contact enthält PageReferences auf Seiten mit dem Template contact.&lt;br /&gt;
&lt;br /&gt;
Ich möchte in einer Seite mit dem Template &amp;#039;&amp;#039;&amp;#039;contact&amp;#039;&amp;#039;&amp;#039; alle Seiten des Templates &amp;#039;&amp;#039;&amp;#039;client&amp;#039;&amp;#039;&amp;#039; finden, die im Repeater Feld r_assignment ein Pagereference pr_contact haben dass auf meine Seite (also $page) zeigt&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$clients = pages()-&amp;gt;find(&amp;quot;template=key_account_client,r_contact_function_assignment.pr_contact=$page,sort=title&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstelle Seitenreferenzen ===&lt;br /&gt;
&lt;br /&gt;
 $myPage-&amp;gt;pReferences = $page; // creates one reference&lt;br /&gt;
 $myPage-&amp;gt;save(); // make sure to save page somewhere&lt;br /&gt;
&lt;br /&gt;
This of course doesn&amp;#039;t work with multiple pages. I tried this (found from current docs, used in images):&lt;br /&gt;
&lt;br /&gt;
 $myPage-&amp;gt;pReferences-&amp;gt;add($page);﻿ // adds a page reference, allows more than one add (if field allows this).&lt;br /&gt;
 $myPage-&amp;gt;save();&lt;br /&gt;
=== Entferne Seitenreferenzen ===&lt;br /&gt;
 https://processwire.com/talk/topic/1936-remove-entry-from-pagesfield-via-api/&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page-&amp;gt;[field-name]-&amp;gt;remove($[page-you-want-to-remove]); &lt;br /&gt;
$page-&amp;gt;save();&lt;br /&gt;
&lt;br /&gt;
//For example, if you wanted to remove the first page:&lt;br /&gt;
&lt;br /&gt;
$p = $page-&amp;gt;related_pages-&amp;gt;first(); &lt;br /&gt;
$page-&amp;gt;related_pages-&amp;gt;remove($p);&lt;br /&gt;
$page-&amp;gt;save(); &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Überprüfe Seitenreferenz ===&lt;br /&gt;
Assuming you&amp;#039;re trying to remove a page from a page field if it is there already and otherwise add it there:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if($user-&amp;gt;abos-&amp;gt;has($p)) {&lt;br /&gt;
   $user-&amp;gt;abos-&amp;gt;remove($p);&lt;br /&gt;
} else {&lt;br /&gt;
   $user-&amp;gt;abos-&amp;gt;add($p);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Umgekehrter Zugriff auf Page Reference ==&lt;br /&gt;
Manchmal möchte man von der &amp;quot;anderen Seite&amp;quot; also von der referenzierten Seite auf Seiten zugreifen, die auf diese Seite zeigen. Entweder man möchte über die Api effektiv drauf zugreifen, oder man möchte im Backend bessere Bearbeitungsmöglichkeiten.&lt;br /&gt;
&lt;br /&gt;
=== Hilfsmodule ===&lt;br /&gt;
Ich editiere eine Seite und möchte eine Referenz auf diese Seite bearbeiten oder einfügen. Ich möchte die Seite aber nicht verlassen müssen sondern alles in einem Rutsch erledigen.&lt;br /&gt;
 http://modules.processwire.com/modules/admin-page-field-edit-links/ &lt;br /&gt;
Ermöglicht das Bearbeiten von Seitenreferenzen in einem Inline Frame.&lt;br /&gt;
&lt;br /&gt;
 http://modules.processwire.com/modules/connect-page-fields/&lt;br /&gt;
Ermöglicht das Synchronisieren von zwei Seiten die sich gegenseitig referenzieren. In mySQL würde man hier lieber eine m:n Verbindung nehmen anstatt zwei Felder zu nutzen, da man hier zwei Datensätze pflegt (redundant und Gefahr das es mal asynchron ist). Vorteil ist aber, dass man über die API Performancevorteile hat, weil man niemals eine Suche nach &amp;quot;was zeigt hierher&amp;quot; machen muss.&lt;br /&gt;
&lt;br /&gt;
== Selektoren die helfen ==&lt;br /&gt;
Selektoren die einem helfen Seiten die eine Referenz auf die aktuelle Seite  zu finden.&lt;br /&gt;
 page()-&amp;gt;references()&lt;br /&gt;
und der &lt;br /&gt;
 owner &lt;br /&gt;
Selektor&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Page_Reference_(Field)&amp;diff=25377</id>
		<title>ProcessWire - Page Reference (Field)</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Page_Reference_(Field)&amp;diff=25377"/>
		<updated>2021-07-16T09:29:57Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: /* Entferne Seitenreferenzen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Page Reference Felder enthalten Verbindungen zu anderen Seiten.&lt;br /&gt;
== API Zugriff auf Page Reference ==&lt;br /&gt;
=== Einfache Beispiele ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// examples&lt;br /&gt;
$someOtherPage = $pages-&amp;gt;get(1234);&lt;br /&gt;
$page-&amp;gt;your_page_field = $someOtherPage;// @note: not sure it works in all contexts&lt;br /&gt;
$page-&amp;gt;your_page_field-&amp;gt;add($someOtherPage);&lt;br /&gt;
$page-&amp;gt;your_page_field-&amp;gt;add(1234);&lt;br /&gt;
&lt;br /&gt;
// Manipulate page reference this way...&lt;br /&gt;
$p = $pages-&amp;gt;get(1234);&lt;br /&gt;
$p-&amp;gt;of(false); // always switch of output formatting when manipulating and save back values&lt;br /&gt;
$p-&amp;gt;page_reference_field-&amp;gt;add(1111); // add another page by id&lt;br /&gt;
$p-&amp;gt;save();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finde Seiten die auf Diese zeigen ===&lt;br /&gt;
 https://processwire.com/api/ref/page/references/&lt;br /&gt;
Available since version 3.0.107.&lt;br /&gt;
&lt;br /&gt;
 // basic usage&lt;br /&gt;
 $items = $page-&amp;gt;references();&lt;br /&gt;
&lt;br /&gt;
 // usage with all arguments&lt;br /&gt;
 $items = $page-&amp;gt;references($selector = &amp;#039;&amp;#039;, $field = &amp;#039;&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
=== Komplexe Referenzierung ===&lt;br /&gt;
 https://processwire.com/talk/topic/1224-selector-and-page-reference-field/&lt;br /&gt;
Finde Seiten mit dem Template &amp;#039;&amp;#039;&amp;#039;poi&amp;#039;&amp;#039;&amp;#039; die ein Seitenreferenz auf eine Seite mit dem Titel &amp;#039;&amp;#039;&amp;#039;Zoo&amp;#039;&amp;#039;&amp;#039; haben. Das PR Feld hat den Namen poi_type&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$pr = $pages-&amp;gt;get(&amp;quot;title=Zoo&amp;quot;); // $pr enthält das Pageobjekt&lt;br /&gt;
$poi = $pages-&amp;gt;find(&amp;quot;template=poi, poi_type=$pr&amp;quot;); // Pageobjekt als Parameter für den Selektor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es kann auch ein PageArray Objekt zum Suchen genutzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$prs = $pages-&amp;gt;find(&amp;quot;title=Zoo|Theme park|Museum&amp;quot;); // maybe also use the name or id&lt;br /&gt;
$poi = $pages-&amp;gt;find(&amp;quot;template=poi, poi_type=$prs&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== PageReference in Repeater ====&lt;br /&gt;
template client enthält einen Repeater r_assignment und dieser die Seitenreferenzen pr_contact und pr_function&lt;br /&gt;
&lt;br /&gt;
pr_contact enthält PageReferences auf Seiten mit dem Template contact.&lt;br /&gt;
&lt;br /&gt;
Ich möchte in einer Seite mit dem Template &amp;#039;&amp;#039;&amp;#039;contact&amp;#039;&amp;#039;&amp;#039; alle Seiten des Templates &amp;#039;&amp;#039;&amp;#039;client&amp;#039;&amp;#039;&amp;#039; finden, die im Repeater Feld r_assignment ein Pagereference pr_contact haben dass auf meine Seite (also $page) zeigt&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$clients = pages()-&amp;gt;find(&amp;quot;template=key_account_client,r_contact_function_assignment.pr_contact=$page,sort=title&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstelle Seitenreferenzen ===&lt;br /&gt;
&lt;br /&gt;
 $myPage-&amp;gt;pReferences = $page; // creates one reference&lt;br /&gt;
 $myPage-&amp;gt;save(); // make sure to save page somewhere&lt;br /&gt;
&lt;br /&gt;
This of course doesn&amp;#039;t work with multiple pages. I tried this (found from current docs, used in images):&lt;br /&gt;
&lt;br /&gt;
 $myPage-&amp;gt;pReferences-&amp;gt;add($page);﻿ // adds a page reference, allows more than one add (if field allows this).&lt;br /&gt;
 $myPage-&amp;gt;save();&lt;br /&gt;
=== Entferne Seitenreferenzen ===&lt;br /&gt;
 https://processwire.com/talk/topic/1936-remove-entry-from-pagesfield-via-api/&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page-&amp;gt;[field-name]-&amp;gt;remove($[page-you-want-to-remove]); &lt;br /&gt;
$page-&amp;gt;save();&lt;br /&gt;
&lt;br /&gt;
//For example, if you wanted to remove the first page:&lt;br /&gt;
&lt;br /&gt;
$p = $page-&amp;gt;related_pages-&amp;gt;first(); &lt;br /&gt;
$page-&amp;gt;related_pages-&amp;gt;remove($p);&lt;br /&gt;
$page-&amp;gt;save(); &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Überprüfe Seitenreferenz ==&lt;br /&gt;
Assuming you&amp;#039;re trying to remove a page from a page field if it is there already and otherwise add it there:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if($user-&amp;gt;abos-&amp;gt;has($p)) {&lt;br /&gt;
   $user-&amp;gt;abos-&amp;gt;remove($p);&lt;br /&gt;
} else {&lt;br /&gt;
   $user-&amp;gt;abos-&amp;gt;add($p);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Umgekehrter Zugriff auf Page Reference ==&lt;br /&gt;
Manchmal möchte man von der &amp;quot;anderen Seite&amp;quot; also von der referenzierten Seite auf Seiten zugreifen, die auf diese Seite zeigen. Entweder man möchte über die Api effektiv drauf zugreifen, oder man möchte im Backend bessere Bearbeitungsmöglichkeiten.&lt;br /&gt;
&lt;br /&gt;
=== Hilfsmodule ===&lt;br /&gt;
Ich editiere eine Seite und möchte eine Referenz auf diese Seite bearbeiten oder einfügen. Ich möchte die Seite aber nicht verlassen müssen sondern alles in einem Rutsch erledigen.&lt;br /&gt;
 http://modules.processwire.com/modules/admin-page-field-edit-links/ &lt;br /&gt;
Ermöglicht das Bearbeiten von Seitenreferenzen in einem Inline Frame.&lt;br /&gt;
&lt;br /&gt;
 http://modules.processwire.com/modules/connect-page-fields/&lt;br /&gt;
Ermöglicht das Synchronisieren von zwei Seiten die sich gegenseitig referenzieren. In mySQL würde man hier lieber eine m:n Verbindung nehmen anstatt zwei Felder zu nutzen, da man hier zwei Datensätze pflegt (redundant und Gefahr das es mal asynchron ist). Vorteil ist aber, dass man über die API Performancevorteile hat, weil man niemals eine Suche nach &amp;quot;was zeigt hierher&amp;quot; machen muss.&lt;br /&gt;
&lt;br /&gt;
== Selektoren die helfen ==&lt;br /&gt;
Selektoren die einem helfen Seiten die eine Referenz auf die aktuelle Seite  zu finden.&lt;br /&gt;
 page()-&amp;gt;references()&lt;br /&gt;
und der &lt;br /&gt;
 owner &lt;br /&gt;
Selektor&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Page_Reference_(Field)&amp;diff=25376</id>
		<title>ProcessWire - Page Reference (Field)</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Page_Reference_(Field)&amp;diff=25376"/>
		<updated>2021-07-16T08:59:38Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: /* Erstelle Seitenreferenzen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Page Reference Felder enthalten Verbindungen zu anderen Seiten.&lt;br /&gt;
== API Zugriff auf Page Reference ==&lt;br /&gt;
=== Einfache Beispiele ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// examples&lt;br /&gt;
$someOtherPage = $pages-&amp;gt;get(1234);&lt;br /&gt;
$page-&amp;gt;your_page_field = $someOtherPage;// @note: not sure it works in all contexts&lt;br /&gt;
$page-&amp;gt;your_page_field-&amp;gt;add($someOtherPage);&lt;br /&gt;
$page-&amp;gt;your_page_field-&amp;gt;add(1234);&lt;br /&gt;
&lt;br /&gt;
// Manipulate page reference this way...&lt;br /&gt;
$p = $pages-&amp;gt;get(1234);&lt;br /&gt;
$p-&amp;gt;of(false); // always switch of output formatting when manipulating and save back values&lt;br /&gt;
$p-&amp;gt;page_reference_field-&amp;gt;add(1111); // add another page by id&lt;br /&gt;
$p-&amp;gt;save();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finde Seiten die auf Diese zeigen ===&lt;br /&gt;
 https://processwire.com/api/ref/page/references/&lt;br /&gt;
Available since version 3.0.107.&lt;br /&gt;
&lt;br /&gt;
 // basic usage&lt;br /&gt;
 $items = $page-&amp;gt;references();&lt;br /&gt;
&lt;br /&gt;
 // usage with all arguments&lt;br /&gt;
 $items = $page-&amp;gt;references($selector = &amp;#039;&amp;#039;, $field = &amp;#039;&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
=== Komplexe Referenzierung ===&lt;br /&gt;
 https://processwire.com/talk/topic/1224-selector-and-page-reference-field/&lt;br /&gt;
Finde Seiten mit dem Template &amp;#039;&amp;#039;&amp;#039;poi&amp;#039;&amp;#039;&amp;#039; die ein Seitenreferenz auf eine Seite mit dem Titel &amp;#039;&amp;#039;&amp;#039;Zoo&amp;#039;&amp;#039;&amp;#039; haben. Das PR Feld hat den Namen poi_type&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$pr = $pages-&amp;gt;get(&amp;quot;title=Zoo&amp;quot;); // $pr enthält das Pageobjekt&lt;br /&gt;
$poi = $pages-&amp;gt;find(&amp;quot;template=poi, poi_type=$pr&amp;quot;); // Pageobjekt als Parameter für den Selektor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es kann auch ein PageArray Objekt zum Suchen genutzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$prs = $pages-&amp;gt;find(&amp;quot;title=Zoo|Theme park|Museum&amp;quot;); // maybe also use the name or id&lt;br /&gt;
$poi = $pages-&amp;gt;find(&amp;quot;template=poi, poi_type=$prs&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== PageReference in Repeater ====&lt;br /&gt;
template client enthält einen Repeater r_assignment und dieser die Seitenreferenzen pr_contact und pr_function&lt;br /&gt;
&lt;br /&gt;
pr_contact enthält PageReferences auf Seiten mit dem Template contact.&lt;br /&gt;
&lt;br /&gt;
Ich möchte in einer Seite mit dem Template &amp;#039;&amp;#039;&amp;#039;contact&amp;#039;&amp;#039;&amp;#039; alle Seiten des Templates &amp;#039;&amp;#039;&amp;#039;client&amp;#039;&amp;#039;&amp;#039; finden, die im Repeater Feld r_assignment ein Pagereference pr_contact haben dass auf meine Seite (also $page) zeigt&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$clients = pages()-&amp;gt;find(&amp;quot;template=key_account_client,r_contact_function_assignment.pr_contact=$page,sort=title&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstelle Seitenreferenzen ===&lt;br /&gt;
&lt;br /&gt;
 $myPage-&amp;gt;pReferences = $page; // creates one reference&lt;br /&gt;
 $myPage-&amp;gt;save(); // make sure to save page somewhere&lt;br /&gt;
&lt;br /&gt;
This of course doesn&amp;#039;t work with multiple pages. I tried this (found from current docs, used in images):&lt;br /&gt;
&lt;br /&gt;
 $myPage-&amp;gt;pReferences-&amp;gt;add($page);﻿ // adds a page reference, allows more than one add (if field allows this).&lt;br /&gt;
 $myPage-&amp;gt;save();&lt;br /&gt;
=== Entferne Seitenreferenzen ===&lt;br /&gt;
 https://processwire.com/talk/topic/1936-remove-entry-from-pagesfield-via-api/&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page-&amp;gt;[field-name]-&amp;gt;remove($[page-you-want-to-remove]); &lt;br /&gt;
$page-&amp;gt;save();&lt;br /&gt;
&lt;br /&gt;
//For example, if you wanted to remove the first page:&lt;br /&gt;
&lt;br /&gt;
$p = $page-&amp;gt;related_pages-&amp;gt;first(); &lt;br /&gt;
$page-&amp;gt;related_pages-&amp;gt;remove($p);&lt;br /&gt;
$page-&amp;gt;save(); &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Umgekehrter Zugriff auf Page Reference ==&lt;br /&gt;
Manchmal möchte man von der &amp;quot;anderen Seite&amp;quot; also von der referenzierten Seite auf Seiten zugreifen, die auf diese Seite zeigen. Entweder man möchte über die Api effektiv drauf zugreifen, oder man möchte im Backend bessere Bearbeitungsmöglichkeiten.&lt;br /&gt;
&lt;br /&gt;
=== Hilfsmodule ===&lt;br /&gt;
Ich editiere eine Seite und möchte eine Referenz auf diese Seite bearbeiten oder einfügen. Ich möchte die Seite aber nicht verlassen müssen sondern alles in einem Rutsch erledigen.&lt;br /&gt;
 http://modules.processwire.com/modules/admin-page-field-edit-links/ &lt;br /&gt;
Ermöglicht das Bearbeiten von Seitenreferenzen in einem Inline Frame.&lt;br /&gt;
&lt;br /&gt;
 http://modules.processwire.com/modules/connect-page-fields/&lt;br /&gt;
Ermöglicht das Synchronisieren von zwei Seiten die sich gegenseitig referenzieren. In mySQL würde man hier lieber eine m:n Verbindung nehmen anstatt zwei Felder zu nutzen, da man hier zwei Datensätze pflegt (redundant und Gefahr das es mal asynchron ist). Vorteil ist aber, dass man über die API Performancevorteile hat, weil man niemals eine Suche nach &amp;quot;was zeigt hierher&amp;quot; machen muss.&lt;br /&gt;
&lt;br /&gt;
== Selektoren die helfen ==&lt;br /&gt;
Selektoren die einem helfen Seiten die eine Referenz auf die aktuelle Seite  zu finden.&lt;br /&gt;
 page()-&amp;gt;references()&lt;br /&gt;
und der &lt;br /&gt;
 owner &lt;br /&gt;
Selektor&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Page_Reference_(Field)&amp;diff=25375</id>
		<title>ProcessWire - Page Reference (Field)</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=ProcessWire_-_Page_Reference_(Field)&amp;diff=25375"/>
		<updated>2021-07-16T08:54:54Z</updated>

		<summary type="html">&lt;p&gt;134.3.85.26: /* Reverse Page Reference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Page Reference Felder enthalten Verbindungen zu anderen Seiten.&lt;br /&gt;
== API Zugriff auf Page Reference ==&lt;br /&gt;
=== Einfache Beispiele ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// examples&lt;br /&gt;
$someOtherPage = $pages-&amp;gt;get(1234);&lt;br /&gt;
$page-&amp;gt;your_page_field = $someOtherPage;// @note: not sure it works in all contexts&lt;br /&gt;
$page-&amp;gt;your_page_field-&amp;gt;add($someOtherPage);&lt;br /&gt;
$page-&amp;gt;your_page_field-&amp;gt;add(1234);&lt;br /&gt;
&lt;br /&gt;
// Manipulate page reference this way...&lt;br /&gt;
$p = $pages-&amp;gt;get(1234);&lt;br /&gt;
$p-&amp;gt;of(false); // always switch of output formatting when manipulating and save back values&lt;br /&gt;
$p-&amp;gt;page_reference_field-&amp;gt;add(1111); // add another page by id&lt;br /&gt;
$p-&amp;gt;save();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finde Seiten die auf Diese zeigen ===&lt;br /&gt;
 https://processwire.com/api/ref/page/references/&lt;br /&gt;
Available since version 3.0.107.&lt;br /&gt;
&lt;br /&gt;
 // basic usage&lt;br /&gt;
 $items = $page-&amp;gt;references();&lt;br /&gt;
&lt;br /&gt;
 // usage with all arguments&lt;br /&gt;
 $items = $page-&amp;gt;references($selector = &amp;#039;&amp;#039;, $field = &amp;#039;&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
=== Komplexe Referenzierung ===&lt;br /&gt;
 https://processwire.com/talk/topic/1224-selector-and-page-reference-field/&lt;br /&gt;
Finde Seiten mit dem Template &amp;#039;&amp;#039;&amp;#039;poi&amp;#039;&amp;#039;&amp;#039; die ein Seitenreferenz auf eine Seite mit dem Titel &amp;#039;&amp;#039;&amp;#039;Zoo&amp;#039;&amp;#039;&amp;#039; haben. Das PR Feld hat den Namen poi_type&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$pr = $pages-&amp;gt;get(&amp;quot;title=Zoo&amp;quot;); // $pr enthält das Pageobjekt&lt;br /&gt;
$poi = $pages-&amp;gt;find(&amp;quot;template=poi, poi_type=$pr&amp;quot;); // Pageobjekt als Parameter für den Selektor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es kann auch ein PageArray Objekt zum Suchen genutzt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$prs = $pages-&amp;gt;find(&amp;quot;title=Zoo|Theme park|Museum&amp;quot;); // maybe also use the name or id&lt;br /&gt;
$poi = $pages-&amp;gt;find(&amp;quot;template=poi, poi_type=$prs&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== PageReference in Repeater ====&lt;br /&gt;
template client enthält einen Repeater r_assignment und dieser die Seitenreferenzen pr_contact und pr_function&lt;br /&gt;
&lt;br /&gt;
pr_contact enthält PageReferences auf Seiten mit dem Template contact.&lt;br /&gt;
&lt;br /&gt;
Ich möchte in einer Seite mit dem Template &amp;#039;&amp;#039;&amp;#039;contact&amp;#039;&amp;#039;&amp;#039; alle Seiten des Templates &amp;#039;&amp;#039;&amp;#039;client&amp;#039;&amp;#039;&amp;#039; finden, die im Repeater Feld r_assignment ein Pagereference pr_contact haben dass auf meine Seite (also $page) zeigt&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$clients = pages()-&amp;gt;find(&amp;quot;template=key_account_client,r_contact_function_assignment.pr_contact=$page,sort=title&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstelle Seitenreferenzen ===&lt;br /&gt;
&lt;br /&gt;
 $myPage-&amp;gt;pReferences = $page; // creates one reference&lt;br /&gt;
 $myPage-&amp;gt;save(); // make sure to save page somewhere&lt;br /&gt;
&lt;br /&gt;
This of course doesn&amp;#039;t work with multiple pages. I tried this (found from current docs, used in images):&lt;br /&gt;
&lt;br /&gt;
 $myPage-&amp;gt;pReferences-&amp;gt;add($page);﻿ // adds a page reference, allows more than one add (if field allows this).&lt;br /&gt;
 $myPage-&amp;gt;save();&lt;br /&gt;
&lt;br /&gt;
== Umgekehrter Zugriff auf Page Reference ==&lt;br /&gt;
Manchmal möchte man von der &amp;quot;anderen Seite&amp;quot; also von der referenzierten Seite auf Seiten zugreifen, die auf diese Seite zeigen. Entweder man möchte über die Api effektiv drauf zugreifen, oder man möchte im Backend bessere Bearbeitungsmöglichkeiten.&lt;br /&gt;
&lt;br /&gt;
=== Hilfsmodule ===&lt;br /&gt;
Ich editiere eine Seite und möchte eine Referenz auf diese Seite bearbeiten oder einfügen. Ich möchte die Seite aber nicht verlassen müssen sondern alles in einem Rutsch erledigen.&lt;br /&gt;
 http://modules.processwire.com/modules/admin-page-field-edit-links/ &lt;br /&gt;
Ermöglicht das Bearbeiten von Seitenreferenzen in einem Inline Frame.&lt;br /&gt;
&lt;br /&gt;
 http://modules.processwire.com/modules/connect-page-fields/&lt;br /&gt;
Ermöglicht das Synchronisieren von zwei Seiten die sich gegenseitig referenzieren. In mySQL würde man hier lieber eine m:n Verbindung nehmen anstatt zwei Felder zu nutzen, da man hier zwei Datensätze pflegt (redundant und Gefahr das es mal asynchron ist). Vorteil ist aber, dass man über die API Performancevorteile hat, weil man niemals eine Suche nach &amp;quot;was zeigt hierher&amp;quot; machen muss.&lt;br /&gt;
&lt;br /&gt;
== Selektoren die helfen ==&lt;br /&gt;
Selektoren die einem helfen Seiten die eine Referenz auf die aktuelle Seite  zu finden.&lt;br /&gt;
 page()-&amp;gt;references()&lt;br /&gt;
und der &lt;br /&gt;
 owner &lt;br /&gt;
Selektor&lt;/div&gt;</summary>
		<author><name>134.3.85.26</name></author>
	</entry>
</feed>