.htaccess RewriteRule не работает в подкаталоге

Я программирую новую версию своего веб-сайта, и я пытаюсь получить .htaccess, чтобы переписать правильно. Мой новый сайт хранится здесь:

www.example.com/storage/new/

Мне нужно переписать эти URL-адреса:

www.example.com/storage/new/welcome/   -> index.php?action=welcome
www.example.com/storage/new/page/name/ -> index.php?action=page&url=name
www.example.com/storage/new/post/name/ -> index.php?action=post&url=name

Это мой файл .htaccess:

RewriteEngine On

RewriteRule ^/welcome/$ index.php?action=welcome [L]
RewriteRule ^/page/([a-zA-Z0-9]+)/$ index.php?action=page&url=$1 [L]
RewriteRule ^/post/([a-zA-Z0-9]+)/$ index.php?action=post&url=$1 [L]

Однако это не работает; все результаты в 404 не найдены. Я пробовал все, даже набрав www.example.com/storage/new/ вместо ^. У меня есть другой .htaccess в корне сервера (www.example.com), который выглядит так:

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

Я не могу представить, как это повлияло бы на www.example.com/storage/new/, но вы никогда не знаете. Может ли кто-нибудь помочь мне с этим?

Ответ 1

Мне пришлось отправить по электронной почте моего администратора сервера, и выясняется, что .htaccess рассматривает свой собственный путь как root; Я просто удалил первый / перед ^ в каждом правиле. Мой последний файл .htaccess выглядит следующим образом:

RewriteEngine On

RewriteRule ^welcome/$ index.php?action=welcome [L,QSA]
RewriteRule ^page/(.*)/$ index.php?action=page&url=$1 [L,QSA]
RewriteRule ^post/(.*)/$ index.php?action=post&url=$1 [L,QSA]

Ответ 2

The ^ означает начало строки. RewriteRules будет смотреть на все после example.com/, поэтому вам нужно включить store/new/в свой шаблон (или удалить ^).

Кроме того, я бы хотел добавить флаг NC, чтобы ваш шаблон был сопоставлен без учета чувствительности к регистру (например,/Страница/или/страница/будет работать). Это означает, что вы можете изменить шаблон [a-zA-Z0-9] только на [a-z0-9]

RewriteRule ^storage/new/welcome/$ index.php?action=welcome [L,NC]
RewriteRule ^storage/new/page/([a-z0-9]+)/$ index.php?action=page&url=$1 [L,NC]
RewriteRule ^storage/new/post/([a-z0-9]+)/$ index.php?action=post&url=$1 [L,NC]