mod_rewrite перенаправляет с абсолютным путем в URL - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь использовать Apache mod_rewrite .Первым делом я переписал свой URL в файл index.php, который работал нормально.Но я подумал, что тоже должен удалить косую черту (и), потому что я предпочел бы, чтобы это обрабатывал Apache, а не мой маршрутизатор PHP.

Вот весь контент моего .htaccess файла:

RewriteEngine on

# one of the attempts to remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.*)/+$
RewriteRule ^(.*)/+$ $1 [R=301,L]

# This is the rewriting to my index.php (working)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [L]


Проблема:
Я прочитал несколько вопросов об удалении косой черты, но не смог найти рабочий ответ для меня:
Для каждого ответа, который я пробовал, я былсмог добраться до моего роутера PHP index.php (находится в Phunder\public\) без косой черты:
// Requested URL                                | No redirection
http://localhost/projects/Phunder/public/home   | http://localhost/projects/Phunder/public/home

Но при запросе той же страницы с косой чертой я перенаправляюсь с включенным абсолютным путем:

// Requested URL                                | Wrong redirection
http://localhost/projects/Phunder/public/home/  | http://localhost/C:/xampp/htdocs/projects/Phunder/public/home


Другая информация:
  • Я всегда очищаю свой кеш при тестировании
  • Изменение последнего RewriteRule до RewriteRule ^(.*)/?$ index.php?/$1 [L] приводит к ошибке 404 с URL с косой чертой.
  • Фактическое неправильное перенаправление приводит к ошибке 403

Я новичок в mod_rewrite. Я не всегда понимаю, что яу (печально).Есть что-то, что я пропустил или неправильно использовал?Что я должен сделать, чтобы получить ожидаемое поведение?

1 Ответ

0 голосов
/ 24 октября 2018

Для правил перенаправления требуется либо абсолютный URL, либо RewriteBase.Вы также можете извлечь полный URI из %{REQUEST_URI} так:

RewriteEngine on

# one of the attempts to remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/+$
RewriteRule ^ %1 [R=301,NE,L]

# This is the rewriting to my index.php (working)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [L,QSA]
...