MultiViews * слишком * терпим к плохим URL

Когда я включаю MultiViews, если я посещаю плохие URL, моя страница (index.php) все еще достигается, когда я хочу, чтобы пользователь получил ошибку 404 вместо этого. Я пытаюсь выяснить, как это исправить, не создавая правила в моем .htaccess,

Например, "www.mydomain.com/index/ blah / blah", посещает index.php, но я хочу, чтобы он завершился сбоем из-за посторонних компонентов мусорного URL-адреса. Аналогично для "/contact/ blah / awuihda / hiu", которая показывает содержимое файла contact.php, должно выдаваться ошибка 404, поскольку "/ blah / awuihda / hiu" не существует.

Если я отключаю MultiViews, он работает нормально, но тогда я не могу сокращать URL столько, сколько хочу (например, не могу набрать "/ contact", чтобы вызвать "contact.php").

2 ответа

Я нашел решение, которое работает для меня.

Options -Indexes SymLinksIfOwnerMatch -MultiViews

RewriteEngine On

RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

Источник: ссылка

Вы можете просто использовать следующее, чтобы .php расширение не требуется, что является обычным подходом:

RewriteEngine on
# Remove .php if it's present with a 301 redirect
RewriteRule ^(.+)\.php$ $1 [R=301,L]
# If a request doesn't exist as a directory, file or symlink
# and it does exist with .php appended, rewrite to that
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ $1.php [L]

Я знаю, что это добавляет правило .htaccess но это единственное предложение, которое работает для всего, а также означает, что вы не попадаете в потенциально дублирующийся контент, позволяя обслуживать одно и то же с или без .php (или действительно с чем-либо вообще тянущимся после этого, как в ваших примерах). Надеюсь, это полезно.

Он может войти в конфигурацию основного сервера, но потребуется изменить.

Другие вопросы по тегам