Как конвертировать этот очень простой.htaccess в Nginx?
Я использую это .htaccess
которые передают все после URL $param
, такexample.com/news/id
идет в PHP как $_GET['param']='news/id'
, Но Nginx всегда бросает меня на страницу 404.
мой .htaccess
:
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule (.*) index.php?param=$1
Что я пробовал в Nginx default.conf
:
server {
listen 80;
listen [::]:80;
server_name domain.com;
root /var/www/html;
location / {
if (!-f $uri){
set $rule_0 1$rule_0;
}
if (!-d $uri){
set $rule_0 2$rule_0;
}
if ($rule_0 = "21"){
rewrite ^(.*) index.php?param=$1;
}
}
}
2 ответа
Решение
Я мог бы исправить это, используя эти правила:
server{
try_files $uri $uri/ @rewrite;
location @rewrite {
rewrite ^/(.*)$ /index.php?_url=$1;
}
}
Если у вас есть местоположение / { } без каких-либо инструкций внутри, удалите его.
Вы не используете if
здесь вообще, и вы не проверяете вручную наличие файлов. Этот общий шаблон обрабатывается вместо try_files
,
Например:
location / {
try_files $uri $uri/ /index.php?param=$uri;
}
(Если ваше веб-приложение не работает и не может справиться с /
в URI исправьте веб-приложение, если это возможно, или посмотрите на этот вопрос, если нет.)