it-swarm-eu.dev

Mehrfachzugriffs-Überschreibungsregel

hier ist mein Code für die .htaccess-Datei

Options -Indexes
RewriteEngine On
RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^([a-z0-9]+)$ /profile.php?username=$1 [L]
RewriteRule ^([a-z0-9]+)$ /display.php?page=$1 [L]

Beim ersten funktioniert es richtig und wird folgendermaßen angezeigt: www.site.com/user

Die zweite Funktion funktioniert nicht. Normalerweise wird sie folgendermaßen angezeigt: www.site.com/display.php?page=10. Ich möchte die Seite so anzeigen www.site.com/article Ich habe verschiedene Dinge ausprobiert und kein Ergebnis. Bitte sagen Sie mir, wie ich mit mehreren Regeln arbeiten soll. Bitte geben Sie mir auch einen Rat, wie Sie diese Funktionen in PHP verwenden können, da ich glaube, dass ich etwas nicht wirklich Gutes getan habe. Mein PHP-Code für die Verwendung dieser Regel ist:

<p><a class="button" href="/<?php echo $user_data['username']; ?>"> Profile</a></p>

Es funktioniert, aber vielleicht ist es eine bessere Möglichkeit, einen Link zu erstellen, um htaccess zu nutzen.

8
Catalin Macovei

Die beiden Regeln, bei denen Sie einen Konflikt haben, die verwendeten Muster sind genau die gleichen , dh abgesehen von den Bedingungen, die nur auf die erste Regel angewendet werden, sind die beiden Regeln vollständig nicht unterscheidbar.

Mit dieser URL:

http://www.site.com/blah

Ist "blah" eine Seite oder ein Benutzer? Kann nicht sagen, weil das Regex-Muster (^([a-z0-9]+)$) für beide Regeln mit "blah" übereinstimmt. Also wird immer der erste angewendet egal was . Sie müssen etwas hinzufügen, um zwischen den beiden zu unterscheiden, z. B. einen "Benutzer" oder eine "Seite" in die URL einfügen:

http://www.site.com/user/blah
http://www.site.com/page/bleh

Und deine Regeln würden so aussehen:

Options -Indexes
RewriteEngine On

RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^user/([a-z0-9]+)$ /profile.php?username=$1 [L]

RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^page/([a-z0-9]+)$ /display.php?page=$1 [L]
22
Jon Lin
Options -Indexes
RewriteEngine On

RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^user/([a-z0-9]+)$ /profile.php?username=$1 [N]
RewriteRule ^page/([a-z0-9]+)$ /display.php?page=$1 [L]

verwenden Sie [N] (weiter), um weitere Regeln zu derselben Bedingung hinzuzufügen, und [L] (zuletzt), um die letzte Regel zu identifizieren

3

Ich habe es so gemacht.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /domain/index.php/$1 [C]

#second condition and rule
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /domain/subdir/index.php/$1 [L]
2
Enzo

Nach einer Menge Versuch und Irrtum:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?\/)*?([a-z\.\-]+)(\d+)\.(bmp|css|cur|gif|ico|jpe?g|js|png|svgz?|webp|webmanifest)$ $1$2$4 [NC]

# Send would-be 404 requests to Craft
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/(favicon\.ico|Apple-touch-icon.*\.png)$ [NC]
RewriteRule (.+) index.php?p=$1 [L]
</IfModule>

Der Tipp, den ich erhielt, war, dass [L] die letzte Regel angibt und [N] bedeutet, fortzufahren.

0
Taylorsuk