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]