Je veux enlever index.php
de mon URL après les paramètres de requête.
Ceci est mon URL:
http://127.0.0.1/user/report?user=USERNAME
J'ai supprimé les paramètres de requête et les ai convertis en une jolie URL en utilisant:
RewriteCond %{QUERY_STRING} !user=
RewriteRule ^([a-zA-Z0-9\-]+)/(.*)$ $2?user=$1 [L,QSA]
RewriteRule ^([a-zA-Z0-9\-]+)$ ?user=$1 [L,QSA]
Maintenant, mon URL ressemble à ceci:
http://127.0.0.1/user/report/USERNAME
Ainsi, toutes les requêtes adressées à cette URL pointeront vers le script d'entrée de mon projet, c'est-à-dire web/index.php
.
Lorsque j'utilise les itinéraires ci-dessous pour obtenir des données, cela fonctionne:
http://127.0.0.1/user/report/Default/index.php/api/registration/user-registrations/
Mais quand je supprime index.php
à partir de l'URL et accédez-y comme ci-dessous, il lance 404:
http://127.0.0.1/user/report/Default/api/registration/user-registrations/
Fichier de configuration Apache:
Alias /user/report /path/to/project/web/
<Directory /path/to/project/web/>
AllowOverride All
Require all Granted
RewriteOptions AllowNoSlash
RewriteEngine On
RewriteBase /user/report/
RewriteOptions AllowNoSlash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^[^.]+[^\/]$ $0\/ [R]
RewriteCond %{QUERY_STRING} !user=
RewriteRule ^([a-zA-Z0-9\-]+)/(.*)$ $2?user=$1 [L,QSA]
RewriteRule ^([a-zA-Z0-9\-]+)$ ?user=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)\.(\d+)\.(bmp|css|cur|gif|ico|jpe?g|m?js|png|svgz?|webp|webmanifest|pdf)$ $1.$3 [L]
</Directory>
J'utilise Symfony pour acheminer toutes mes routes.
Si vous utilisez Apache 2.4 et que vous ne souhaitez pas utiliser .htaccess
(par exemple pour des raisons de performances), la solution est simplement d'utiliser un oneliner: FallBackResource
.
Vous n'auriez besoin que de ceci:
<VirtualHost *:80>
ServerName domain.tld
ServerAlias www.domain.tld
DocumentRoot /var/www/project/public
DirectoryIndex /index.php
<Directory /var/www/project/public>
AllowOverride None
Order Allow,Deny
Allow from All
FallbackResource /index.php
</Directory>
# optionally disable the fallback resource for the asset directories
# which will allow Apache to return a 404 error when files are
# not found instead of passing the request to Symfony
<Directory /var/www/project/public/bundles>
FallbackResource disabled
</Directory>
</VirtualHost>
Ceci est même montré dans documentation de Symfony .