クエリパラメータの後でURLからindex.php
を削除したい。
これは私のURLです。
http://127.0.0.1/user/report?user=USERNAME
クエリパラメータを削除し、次のコマンドを使用してプリティURLに変換しました。
RewriteCond %{QUERY_STRING} !user=
RewriteRule ^([a-zA-Z0-9\-]+)/(.*)$ $2?user=$1 [L,QSA]
RewriteRule ^([a-zA-Z0-9\-]+)$ ?user=$1 [L,QSA]
これで、私のURLは次のようになります。
http://127.0.0.1/user/report/USERNAME
したがって、このURLへのすべてのリクエストは、プロジェクトのエントリスクリプト、つまりweb/index.php
をポイントします。
以下のルートを使用してデータを取得すると、機能します。
http://127.0.0.1/user/report/Default/index.php/api/registration/user-registrations/
しかし、URLからindex.php
を削除して以下のようにアクセスすると、404がスローされます。
http://127.0.0.1/user/report/Default/api/registration/user-registrations/
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>
すべてのルートのルーティングにSymfonyを使用しています。
Apache 2.4を使用していて、.htaccess
ファイルを使用したくない場合(たとえば、パフォーマンス上の理由から)、解決策は、単純に FallBackResource
を使用することです。
これだけが必要です:
<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>
これは Symfonyのドキュメント にも示されています。