2017-01-04 10 views
0

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

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

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

ответ

0

Вы могли бы просто использовать следующее поэтому расширение .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 или без него (или вообще с чем-то вообще заканчиваться после него, как в ваших примерах). Надеюсь, это полезно.

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

+0

Как бы мне нужно изменить, чтобы добавить его в моей конфигурации сервера? – Furentes

+0

С этим в конфигурации моего сервера он перенаправляет мой сайт **/news ** так **/games/csgo/news **, который возвращает 404. – Furentes

+0

Я обновил его для работы в конфигурации сервера вместо .htaccess – SuperDuperApps

0

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

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] 

Источник: link