it-swarm.com.de

mod rewrite bedingung! -der verletzt wird

Ich benutze Wolf CMS, das von PHP bedient wird.

Ich möchte /index.html nach /index.php umleiten.

Ich habe folgendes in .htaccess eingetragen:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /

  RewriteCond %{REQUEST_FILENAME} ^index.html$ [NC]
  RewriteRule ^index.html$ index.php [R=301,L]

  # Wolf CMS rewriting
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-l
  RewriteRule ^(.*)$ index.php?WOLFPAGE=$1 [L,QSA]
</IfModule>

Dies funktioniert, wenn index.html als index.php umgeschrieben wird, dann aber index.php als index.php? WOLFPAGE = index.html umgeschrieben wird. Dies sollte nicht vorkommen, da die WOLFPAGE-Regel die Bedingung hat, dass sie nur angewendet werden soll, wenn Datei existiert nicht, wie durch die ! - f Umschreibebedingung angezeigt.

index.php existiert, warum wird es also umgeschrieben? Warum wird die Bedingung verletzt?

pdate - die Serverversion ist:

  • Server: Apache/2.2.17 (Unix)
    • mod_ssl/2.2.17
    • OpenSSL/0.9.8e-fips-rhel5
    • mod_bwlimited/1.4
    • mod_Perl/2.0.4
    • Perl/v5.8.8
    • X-Powered-By: PHP/5.2.16

pdate2 - Ich habe die Site von/test nach/verschoben und das Problem tritt nicht mehr auf. Als ich oben auf .htaccess schaute, hatte ich die falsche Basis zum Umschreiben; Daher konnte der Server die Datei index.php nicht finden, die den Bedingungen für das Neuschreiben von WOLFPAGE entsprach.

3
Steve

Ich konnte nicht angeben, dass sich die Website im Ordner/test befindet.

Wenn ich das getan hätte, wäre klar, dass _RewriteBase /_ falsch ist. es sollte _RewriteBase /test/_ gewesen sein.

2
Steve

Wenn Sie einfach eine Umleitung durchführen möchten, verwenden Sie

Redirect 301 /index.html http://www.example.com/index.php
1
Simone Carletti

Versuchen Sie, diese Zeile vollständig zu löschen:

RewriteCond %{REQUEST_FILENAME} ^index.html$ [NC]

Da es sich um eine PCRE handelt, sollten Sie den Punkt ausschließen:

RewriteRule ^index\.html$ index.php [R=301,L]

Sie können auch versuchen, nicht mit R=301 umzuleiten:

RewriteRule ^index\.html$ index.php [L]

Ich habe mit der folgenden .htaccess-Datei auf meinem Server getestet und es hat einwandfrei funktioniert:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /

  RewriteRule ^index\.html$ index.php [R=301,L]

  # Wolf CMS rewriting
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-l
  RewriteRule ^(.*)$ index.php?WOLFPAGE=$1 [L,QSA]
</IfModule>

Beachten Sie, dass auch nachdem ich diesen Zugriff entfernt habe, index.html immer noch zu index.php umgeleitet wurde mein Browser erinnerte sich, dass es sich um eine permanente Umleitung handelte. Ich musste den Cache leeren und meinen Browser neu starten, um diesen Effekt zu entfernen.

1
Josh