Мое намерение со следующим кодом (в частности, 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
Во-первых, ваши условия неверны в команде маршрутизации индекса. Во-вторых, у вас есть правило, которое добавляет 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]
R
поэтому он не должен перенаправлять. Если вы поставилиexit;
в верхней частиindex.php
он все еще перенаправляет? Потому что, возможно, PHP выполняет перенаправление, а не.htaccess
.exit;
в верхней частиindex.php
.