Obwohl ich neu bei htaccess bin, habe ich in den letzten Tagen viel gelernt, aber ich hänge an einem bestimmten Teil fest, der dazu geführt hat, dass sich die Website nicht wie gewünscht verhält. Hier ist der Teil des Codes, bei dem ich mein Dilemma habe:
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME}.php -f
Rewriterule ^ %{REQUEST_FILENAME}.php [NC]
# RewriteCond /templates/%{REQUEST_FILENAME}.html -f
RewriteRule ^([^/\.]+)$ index.php?$1 [NC,S=1]
RewriteRule ^([a-zA-Z0-9]+)$ product.php?product_id=$1 [NC]
Die ersten RewriteCond und RewriteRule funktionieren perfekt. Mein Problem ist, was danach kommt.
Was ich erreichen muss, ist, dass, wenn ein Benutzer eingibt/irgendein-wortEs wird gesucht, ob eine Datei mit dem gleichen Namen gültig ist im/VorlagenOrdner und dient somit alsindex.php?ein-wort, sonst wäre esprodukt.php?product_id=ein-wort. Die ... Dieindex.phpRegel funktioniert gut, wenn die zweite Bedingung auskommentiert ist, aber wenn nur dieprodukt.phpRegel funktioniert.
Das angegebene „Tag“ kann aus Zahlen, Buchstaben, Wörtern mit Bindestrich (also beliebigen Wörtern) oder einer Kombination aus Zahlen und Buchstaben bestehen. Die Regeln sollten nicht zwischen Groß- und Kleinschreibung unterscheiden.
Ich bin für jede Hilfe in dieser Angelegenheit dankbar.
Antwort1
Das Problem ist, dass %{REQUEST_FILENAME}
dieabsolutaus der URL übersetzter Pfad, d.h.http://example.com/foobares kann so etwas sein /var/www/vhost/example.com/httpdocs/foobar
(je nachdem, wie Ihr Webserver eingerichtet ist). Ich schlage vor, Sie verwenden Mustervergleiche für die URL wie in
RewriteCond %{DOCUMENT_ROOT}/templates/$1.html -f
RewriteRule ^([^\/\.]+)$ index.php?$1 [NC,S=1]
(Das habe ich allerdings nicht getestet)