Я хочу, чтобы мой nginx отображал все URL-адреса.
С некоторыми исследованиями я сделал первый случай для работы. Это делается по следующей конфигурации:
location / { root html; index index.html index.htm index.php; try_files $uri.html $uri/ =404; }
Он работает для отображения indexhtml.html как indexhtml, но ничего не происходит с .php. Если я изменил $ uri.html на $ uri.php, он не работает ни для .html, ни для .php. Я попытался поставить что-то подобное в php-местоположении, но без каких-либо успехов.
Какие-нибудь советы?
Из того, что я исследовал, добавьте файл /etc/nginx/conf.d/domain.tld.conf, чтобы включить:
location / { try_files $uri $uri.html $uri/ @extensionless-php; index index.html index.htm index.php; } location ~ \.php$ { try_files $uri =404; } location @extensionless-php { rewrite ^(.*)$ $1.php last; }
Затем перезапустите nginx и отпустите его. Надеюсь, это поможет вам! Более подробную информацию можно найти (где я ее нашел) здесь @ tweaktalk.net
Нет необходимости в дополнительных блоках и названных местах и обо всем. Также перемещайте index
строку за пределы блока местоположения
server { index index.html index.php; location / { try_files $uri $uri/ $uri.html $uri.php$is_args$query_string; } location ~ \.php$ { try_files $uri =404; # add fastcgi_pass line here, depending if you use socket or port } }
Имейте в виду, что если у вас есть папка и файл с тем же именем внутри одной и той же папки, например /folder/xyz/
и /folder/xyz.php
вы не сможете запустить php-файл, если папка xyz
содержит index.php
или index.html
, просто имейте это в виду.
Чтобы продолжить ответ Мохаммада , вы также можете предложить перенаправления из .html
и .php
в версии без расширения.
Это может быть выполнено из-за того, что $request_uri
содержит «полный исходный запрос URI (с аргументами)» и на него не влияют внутренние перезаписи, которые не видны пользователю.
server { index index.html index.php; location / { if ($request_uri ~ ^/(.*)\.html$) { return 302 /$1; } try_files $uri $uri/ $uri.html $uri.php?$args; } location ~ \.php$ { if ($request_uri ~ ^/([^?]*)\.php($|\?)) { return 302 /$1?$args; } try_files $uri =404; # add fastcgi_pass line here, depending if you use socket or port } }
Возможно, это может быть полезно для вас. Простой и выполняет свою работу.
location / { rewrite ^/([^\.]+)$ /$1.html break; }