Wie entferne ich * .php, index.php und abschließende Schrägstriche von ulrs vor #ancors und? Queries in htaccess

Ich kann keine zufriedenstellende Antwort auf mein Problem finden. Es waren drei Tage Surfen und nichts finden, was tatsächlich funktioniert.

Meine Site-Struktur lautet wie folgt:

·
|__data
|__controllers
|__helpers
|__partials
|__layouts
|__images
|__javascripts
|__stylesheets
|__public
   |__index.php
   |__subfolder
      |__index.php
      |__other-content.php

Seit ich nur das @ benutzen dawww oderhtml oderhtml_public verzeichnis auf meinem server möchte ich den inhalt von allen php und anderen sachen trennen, die benutzer niemals sehen oder benutzen werden.

Ich habe ein Verzeichnis mit dem Namen @ erstell/public und füge alle Inhalte ein, die der Benutzer sehen wird. Aber jetzt möchte ich aus SEO-Gründen URLs verschönern.

Ich versuche, die PHP- und HTML-Erweiterung zu entfernen, index.php zu entfernen und den abschließenden Schrägstrich von allen Links zu entfernen, einschließlich Ankern, Abfragen und Verzeichnissen.

Beispiele:

http://www.domain.com/ muss seinhttp://domain.com/

http://domain.com/ muss seinhttp://domain.com

http://domain.com/public/ muss seinhttp://domain.com

http://domain.com/public/index.php muss seinhttp://domain.com

http://domain.com/public/subfolder/ muss seinhttp://domain.com/subfolder

http://domain.com/public/subfolder/index.php muss seinhttp://domain.com/subfolder

http://domain.com/public/subfolder/#anchor muss seinhttp://domain.com/subfolder#ancor

http://domain.com/public/subfolder/?query muss seinhttp://domain.com/subfolder?query

http://domain.com/public/subfolder/other-content.php muss seinhttp://domain.com/subfolder/other-content

http://domain.com/public/subfolder/other-content.php#ancor muss seinhttp://domain.com/subfolder/other-content#ancor

http://domain.com/public/subfolder/other-content.php?query muss seinhttp://domain.com/subfolder/other-content?query

Ich benutze derzeit noch keine Abfragen, daher ist es nicht wichtig, sie auf diese Weise zu erstellen, da ich sie verschönern sollte ...

In meinem htaccess habe ich es geschafft, www zu non-www umzuleiten; machen/public content als root und verstecke es vor url; Entfernen Sie den abschließenden Schrägstrich (weder in dirs noch in #ancors). entferne index.php

Ich versuche, das Entfernen des abschließenden Schrägstrichs aus Verzeichnissen zu erzwingen, erhalte jedoch immer eine 403-Meldung. Ich versuche auch, die Erweiterung zu entfernen, erhalte jedoch eine 404-Meldung.

Hier ist mein htaccess:

# Options
Options +FollowSymLinks +MultiViews -Indexes
DirectorySlash off

# Enable Rewrite Engine
RewriteEngine on
RewriteBase /

# Exceptions
RewriteCond %{REQUEST_URI} ^/(images|javascripts|stylesheets)/ [NC]
RewriteRule ^ - [L]

# www to non-www
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%2://%1%{REQUEST_URI} [L,R=301]

# Make /public like it was root
RewriteCond %{REQUEST_URI} !^/public
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /public/$1 [NC,L,QSA]

# Remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^(.+)/$ /$1 [L,R=301]

# Remove index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [L,QSA]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s(.*)/index\.php [NC]
RewriteRule ^ %1 [R=301,L]

# Remove .php extention
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [QSA,L]

# Error pages
ErrorDocument 403 /errors/403.php
ErrorDocument 404 /errors/404.php
ErrorDocument 500 /errors/500.php

BEARBEITE

Ich habe die Lösung von @ ausprobiediese Frag aber es gibt mir immer noch 403 auf Verzeichnissen ohne abschließenden Schrägstrich plus 404 su-Dateien ohne die PHP-Erweiterung!

Plus wenn ich @ tiphttp://domain.com/public es wird mir 403 geben. Wenn ich @ tiphttp://domain.com/public/ es wird nicht an root weitergeleitet.

# Options
Options +FollowSymLinks +MultiViews -Indexes
DirectorySlash off

# Enable Rewrite Engine
RewriteEngine on
RewriteBase /

# Exceptions
RewriteCond %{REQUEST_URI} ^/(images|javascripts|stylesheets)/ [NC]
RewriteRule ^ - [L]

# www to non-www
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%2://%1%{REQUEST_URI} [L,R=301]

# Make /public like it was root
RewriteCond %{REQUEST_URI} !^/public
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /public/$1 [NC,L,QSA]

# remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} \s(.+?)/+[?\s]
RewriteRule ^(.+?)/$ /$1 [R=301,L]

# To internally forward /dir/file to /dir/file.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f [NC]
RewriteRule ^(.+?)/?$ /$1.php [L]

Antworten auf die Frage(4)

Ihre Antwort auf die Frage