.htaccess RewriteRule для преобразования структуры URL-адреса типа каталога в запрос - PullRequest
0 голосов
/ 12 ноября 2010

я знаю, что на этот вопрос уже задавали / отвечали уже несколько раз, но я просто не могу пройти мимо него. Итак, мои извинения ...

Находясь в фазе разработки сайта, я хочу, чтобы в адресной строке браузера отображалось: domain.com/dev/item

Я бы хотел, чтобы RewriteRule изменил его на: domain.com/dev/index.php?p=item

Я использую для этого файл .htaccess, расположенный в каталоге public_html. .htaccess в public_html / dev, который работает нормально, настроен на перенаправление всех, кто не использует мой ip, на domain.com. моя версия apache 2.2.15, и я подтвердил, что могу перенаправить, используя .htaccess, но .htacess верхнего уровня просто не работает. вот код, который я использую:

Options +FollowSymlinks
RewriteEngine On
RewriteRule ^dev/(.*)$ dev/index.php?p=$1 [NC]
#variations tried: ^dev/(.*)+$, ^dev/(.*)+?$

, включая варианты, приводит к 404, / dev / элемент не найден. удаление dev / from ^ dev /(.*)$ приводит к правильному формату URL, но следующие переменные сервера:

[REDIRECT_QUERY_STRING] => p=
[REDIRECT_URL] => /404.shtml
[QUERY_STRING] => p=
[REQUEST_URI] => /dev/item

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

1 Ответ

2 голосов
/ 12 ноября 2010

Необходимо указать / в начале пути перезаписи.

Попробуйте вместо этого:

RewriteEngine on
RewriteBase /

# If request is for a file that does actually exist, don't rewrite.
RewriteCond %{REQUEST_FILENAME} !-f
 # If request is for a directory that does actually exist, don't rewrite.
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^/dev/(.*)$ /dev/index.php?p=$1 [NC]
...