2016-11-03 2 views
1

Я удалил расширения файлов на .php для моего веб-сервера. Я просто хотел сделать это лучше. Это отлично работает..htaccess удалить расширение, но разрешить 404, если не существует

У меня есть следующие страницы: sitename.com/portfolio sitename.com/portfolio/resume/file.html

Htaccess имеет свои правила, так что, когда они посещают по второй ссылке его просто преобразовать его в портфель .php? resume & file = $ 1. Это работает потрясающе.

Хорошо, проблема. Поскольку я удаляю расширения, если пользователь должен был указать домен как sitename.com/ портфолио/ с косой чертой, они получат внутреннюю ошибку сервера. Аналогично, если они просто набирают sitename.com/portfolio/r, они также получают ошибку, так как она не существует. Я знаю, что один из способов заключается в том, чтобы добавить параметр в htacess для каждой страницы, но это похоже на плохой способ сделать это.

В любом случае здесь текущий файл htacess Я использую:

Options +FollowSymlinks 
RewriteEngine On 
RewriteBase/
RewriteRule ^portfolio/resumes/([^/]+).html$ /portfolio.php?resume&file=$1 [L,QSA] 
RewriteRule ^portfolio/resumes$ /portfolio.php?resumes [L,QSA] 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*)$ /$1.php [L] 
ErrorDocument 404 /404.php 

Если я посетить сайт на странице, которая не суммируется и не существует как sitename.com/1 или sitename.com/1.php тогда я получаю мой 404, но если 1.php DID существует, я бы увидел это, и если бы он действительно существовал, и я набрал sitename.com/1/ или sitename.com/1/somethingelse, а вместо 404 (что я ожидаю), тогда дает мне внутреннюю ошибку сервера. Есть ли способ обойти это? ошибка в моем синтаксисе? Благодаря

ответ

1

Это происходит потому, что, когда вы запрашиваете в URI с замыкающей косой чертой, например: /Uri/, ваше правило переписывает его /uri/.php вместо /uri.php, который является неизвестным/неподдерживаемый пункт назначения. Вам нужно принять конечную косую черту как необязательный символ. Измените свое правило на:

RewriteRule ^(.*?)/?$ /$1.php [L] 
+1

Большое спасибо! :) – Kaboom

Смежные вопросы