Регулятор .htaccess не будет фильтровать по .php или без расширения файла. - PullRequest
0 голосов
/ 02 декабря 2018

Попытка установить файл .htaccess для прямых всех URL-адресов, заканчивающихся на .php или без расширения файла, на index.php.Так что URL-адреса, такие как mysite.com/about и mysite.com/news.php, перейдут на index.php, но mysite.com/someimage.jpg и mysite.com/mystyle.css будут обрабатываться нормально.

Я думал, что у меня это было, когда я тестировал с обычным старым PHP, но что-тоне похоже на перевод в файле .htaccess.Вот два правила, которые я придумал:

RewriteRule [A-Za-z0-9]*$ "index.php" [L] # URLs with no extension

RewriteRule [A-Za-z0-9]*\.php$ "index.php" [L] # ending in .php

С этими правилами файлы, такие как CSS и изображения, не обслуживаются, все по-прежнему собирается index.php, поэтому сервер будет обслуживать index.php когда браузер запросил таблицу стилей.Я пытался закомментировать правило .php, поэтому применяется только правило «без расширения», тот же результат.Я попытался добавить косую черту в начале, как если бы это было в URL, и это на самом деле ломает вещи, поэтому ни одно из правил не применяется.

Какая крошечная, но очевидная деталь, которую я здесь упускаю?

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018
  1. Основная проблема заключается в том, что в ваших правилах не используется начальная привязка.
  2. Правила могут быть дополнительно оптимизированы.

Имейте это так:

RewriteEngine On

# ignore index.php
RewriteRule ^index\.php$ [L,NC]

# URLs with no extension OR URLs ending with .php
RewriteRule ^[\w-]+(?:\.php)?$ index.php [L,NC]
0 голосов
/ 02 декабря 2018

Ваши расширения заканчиваются буквенными символами, поэтому [A-Za-z0-9]*$ соответствует jpg из .jpg и css из .css.

Я думаю:

RewriteRule (\.php|^[^.]+)$ "index.php" [L]

будетвыполнить то, что вы хотите.Это означает, что если файл заканчивается на .php или полный путь не содержит точку, отправьте его на index.php.

https://regex101.com/r/AE8AjY/1/

по сравнению с вашим регулярным выражением (s)):

https://regex101.com/r/AE8AjY/2/ (объединили два правила в одно, сделав необязательный параметр .php)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...