Как удалить.php и.расширения html из url с помощью NGINX?
Я хочу, чтобы мой nginx отображал все url-адреса.
- http://www.mydomain.com/indexhtml.html как http://www.mydomain.com/indexhtml
- http://www.mydomain.com/indexphp.php как http://www.mydomain.com/indexphp
С некоторыми исследованиями я сделал первый случай, чтобы работать. Это делается с помощью следующей конфигурации:
location / {
root html;
index index.html index.htm index.php;
try_files $uri.html $uri/ =404;
}
он работает для indexhtml.формат html показывать как indexhtml, но ничего не происходит .РНР. Если я изменю $uri.html в $uri.php, он не работает ни для .в HTML, ни .РНР. Я попытался поместить что-то подобное в PHP-местоположение, но без успеха.
какие советы?
4 ответов
из того, что я исследовал, если вы добавите свой /etc/nginx/conf.д/домен.дву.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 ^(.*)$ .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 /; }
try_files $uri $uri/ $uri.html $uri.php?$args;
}
location ~ \.php$ {
if ($request_uri ~ ^/([^?]*)\.php($|\?)) { return 302 /?$args; }
try_files $uri =404;
# add fastcgi_pass line here, depending if you use socket or port
}
}
возможно, это может быть полезным для вас... Это просто и получает работу:
location / {
rewrite ^/([^\.]+)$ /.html break;
}