Apache переписать, чтобы удалить index.php? - PullRequest
0 голосов
/ 23 ноября 2018

Я пытаюсь переписать свои URL, чтобы удалить index.php?но я изо всех сил пытаюсь заставить его работать.Ближайший ответ, который я могу получить, - вот ответ: удалить знак вопроса из 301 перенаправления с помощью htaccess, когда пользователь вводит старый URL-адрес

Мне нужно преобразовать URL-адреса в красивые URL-адреса при выходе.и переписать их обратно на правильный URL-адрес при входе. Структура URL-адресов выглядит следующим образом:

https://sub.domain.com/index.php?/folder1/folder2-etc

Использование кода из указанного ответа приводит к двойной переадресациикосая черта:

https://sub.domain.com//folder1/folder2-etc

Правила перезаписи, которые я использую из указанного ответа:

RewriteEngine On

RewriteCond %{THE_REQUEST} /index\.php [NC]
RewriteRule ^(.*?)index\.php$ /$1 [L,R=301,NC,NE]

RewriteCond %{THE_REQUEST} \s/+\?([^\s&]+) [NC]
RewriteRule ^ /%1? [R=301,L]

# internal forward from pretty URL to actual one
RewriteRule ^((?!web/)[^/.]+)/?$ /index.php?$1 [L,QSA,NC]

Я подозреваю, что знаю, как решить первый бит,но я изо всех сил пытаюсь понять второе правило для внутреннего форварда.

Кроме того, мне интересно, является ли это лучшим способом сделать это.В настоящее время я использую сервер Apache за обратным прокси-сервером Nginx.Буду ли я лучше делать переписывание на стороне Nginx и внутреннего форварда на Apache?

РЕДАКТИРОВАТЬ:

Осложнение: я заметил дополнительную структуру, чтобы усложнить вещи.Некоторые URL-адреса, по-видимому, имеют https://sub.domain.com/picture.php?/folder1/folder2-etc

. Для них я был бы весьма рад сохранить «изображение» и просто удалить .php?бит.

Я предполагаю, что для первого бита мне нужно сделать что-то вроде следующего:

    RewriteCond %{THE_REQUEST} \s/+index\.php\?/([^\s&]+) [NC]
    RewriteRule ^ /%1? [R=301,L]

    RewriteCond %{THE_REQUEST} \s/+picture\.php\?/([^\s&]+) [NC]
    RewriteRule ^(.*)$ /picture/%1 [R=301,L]

Но не знаю, с чего начать с противоположного ....то есть преобразование симпатичных URL обратно в стандарт.Поможет ли мне объяснить следующий раздел?

    ^((?!web/)[^/.]+)/?$ /index.php?$1 [L,QSA,NC]

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Извините, но, как оказалось, главная причина, по которой я ничего не могу заставить работать, заключается в использовании относительных URL-адресов и динамически генерируемых ссылок в PHP.Не то, что я могу изменить, к сожалению.Не идеальные URL - это то, с чем мне придется жить.Для справки я использую приложение Piwigo

0 голосов
/ 25 ноября 2018
RewriteRule ^/*picture/(.*)$ /picture.php?/$1 [L]
RewriteRule ^/*(?!/*index\.php$)(.*)$ /index.php?/$1 [L]

должен сделать свое дело.Я еще не смог проверить это.

Я использовал только последний флаг [L], чтобы прекратить применять правила к матчу.Флаг добавления строки запроса QSA, похоже, не имеет смысла, так как вы все равно не используете синтаксис? Key = value & ....Также не знаю, если вам действительно нужен флаг NC без учета регистра ...

Примечание: я надеюсь, что ваши php-файлы не содержат пути с .., так как это позволит людям читатьпроизвольные файлы с диска, например /picture/../../../etc/passwd

...