Как использовать .htaccess для перезаписи файлов. php на GCP? - PullRequest
1 голос
/ 08 мая 2020

У меня есть файл .htaccess, который переписывает все мои URL-адреса с path/to/file.php на path/to/file.

У меня это работало локально на WAMP, и оно также работало на домене, размещенном на blacknight .

Однако мы переходим на облачную платформу Google с использованием Debian 9, и здесь он вообще не работает. Если я не добавлю расширение. php, я получу ошибку 404.

Ниже мой полный файл .htaccess:

Options -MultiViews
RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^post/([^\/]+)/?$ post.php?url=$1 [L,NC,QSA]
RewriteRule ^payment/([^\/]+)/?$ payment.php?sub=$1 [L,NC,QSA]
RewriteRule ^player/([^\/]+)/?$ player.php?id=$1 [L,NC,QSA]

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/jpg "access 1 week"
    ExpiresByType image/jpeg "access 1 week"
    ExpiresByType image/gif "access 1 week"
    ExpiresByType image/png "access 1 week"
    ExpiresByType text/css "access 1 hour"
    ExpiresByType text/x-javascript "access 1 hour"
</IfModule>

<IfModule mod_headers.c>
    Header set Connection keep-alive
    <filesmatch "\.(ico|gif|jpg|jpeg|png)$">
        Header set Cache-Control "max-age=604800, public"
    </filesmatch>
    <filesmatch "\.(css)$">
        Header set Cache-Control "max-age=3600, private"
    </filesmatch>
    <filesmatch "\.(js)$">
        Header set Cache-Control "max-age=3600, private"
    </filesmatch>
    <filesMatch "\.(x?html?|php)$">
        Header set Cache-Control "max-age=0, private, must-revalidate"
    </filesMatch>
</IfModule>

Что я могу сделать, чтобы решить эту проблему, или есть ли другой способ переписать URL-адреса в Google Cloud Platform?

1 Ответ

1 голос
/ 13 мая 2020

Если ваш сервер Apache включен, вы должны проверить, включена ли также директива AllowOverride (установите значение «All» или разрешите определенные параметры c). В противном случае Apache не будет учитывать директивы, которые вы туда поместили.

Обычно это должно быть помещено в файл конфигурации вашего виртуального сервера или в основной.

Вот пример:

<Directory "/path/from/where/you/serve/files">
    AllowOverride All
</Directory>

Подробнее: https://httpd.apache.org/docs/2.4/mod/core.html#allowoverride

...