.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]