.htaccess Добавляет .php к URL

0

Мое намерение со следующим кодом (в частности, RewriteRule ^s/([a-zA-Z0-9\-]+)/?$/index.php?s=$1 [L,QSA]) для URL-адреса

example.com/s/full-name

работать так, как если бы это было

example.com/index?s=full-name

В настоящее время мой сервер позволяет использовать URL-стиль example.com/s/$1, но он не отображает содержимое, которое можно найти по index?s=full-name. Вместо этого он меняет URL-адрес на

example.com/s/full-name.php/

когда запрашивается example.com/s/full-name и я понятия не имею, почему. Я был бы очень признателен за любые предложения.

Options +SymLinksIfOwnerMatch
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule ^s/([a-zA-Z0-9\-]+)/?$ /index.php?s=$1 [L,QSA]

RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301,NC]

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

Options -Indexes

ErrorDocument 400 /index?err=400
ErrorDocument 401 /index?err=401
ErrorDocument 403 /index?err=403
ErrorDocument 404 /index?err=404 
ErrorDocument 500 /index?err=500
  • 0
    У вас нет флага R поэтому он не должен перенаправлять. Если вы поставили exit; в верхней части index.php он все еще перенаправляет? Потому что, возможно, PHP выполняет перенаправление, а не .htaccess .
  • 0
    Да, я получаю те же результаты даже с exit; в верхней части index.php .
Теги:
.htaccess

1 ответ

0

Во-первых, ваши условия неверны в команде маршрутизации индекса. Во-вторых, у вас есть правило, которое добавляет php в конец вашего запроса, но он делает это, не проверяя, существует ли файл php. Попробуйте переупорядочить правила и исправить условия:

RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^s/([a-zA-Z0-9\-]+)/?$ /index.php?s=$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^([^\.]+)/?$ $1.php [NC,L]
  • 0
    Очень ценю помощь. Я переупорядочил команды в соответствии с вашими предложениями: сначала 301, затем индексный маршрут, затем .php drop, а затем страницы ошибок, но я все еще получаю тот же результат.
  • 0
    @bethbee вы очистили кеш вашего браузера?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню