Как создать перенаправление 301 на основе строки запроса в подпапке? - PullRequest
0 голосов
/ 26 августа 2009

У меня есть файл .htaccess в корне сайта:

/var/www/mywebsite/htdocs/.htacess

и у меня есть несколько файлов в

/var/www/mywebsite/htdocs/folder/

, которые в настоящее время генерируются index.php? Pc = 1234

Я хочу перенаправить числа в строковой переменной запроса на статические html-страницы в этой папке. Я могу добиться этого в файле .htacess в корне сайта:

RewriteRule ^folder/\?pc=1 /folder/filename.html [R=301,L]

Однако, поскольку таких файлов несколько, было бы полезно, если бы я смог создать файл .htaccess в:

/var/www/mywebsite/htdocs/folder/.htaccess

Мой вопрос: как мне захватить строку запроса и перенаправить соответственно из этой папки?

Ответы [ 3 ]

2 голосов
/ 26 августа 2009

Спасибо Residuum и Nerdling. Вы, ребята, дали мне несколько идей.

Это то, чем я закончил. Следующее в /var/www/mywebsite/htdocs/folder/.htaccess

RewriteEngine On
RewriteBase /folder
RewriteCond %{QUERY_STRING} pc=1
RewriteRule ^$ filename.html? [R=301,L]

Если бы я не включил RewriteBase, URL выглядел бы как:

www.mywebsite.com/var/www/mywebsite/htdocs/folder/

А вот с ним все правильно выглядело как:

www.mywebsite.com/folder/filename.html

Мне также пришлось создать правило перезаписи, которое захватывало пустое имя файла, то есть "^ $", а затем delcare имя файла, к которому я хотел, чтобы pc = 1 пошел.

Еще раз спасибо Residuum, Nerdling

2 голосов
/ 26 августа 2009

Перед RewriteRule для 301 поместите что-то вроде этого:

RewriteCond %{QUERY_STRING} MATCH

где MATCH - это то, что вы хотите сопоставить. Вы можете использовать несколько блоков с блоком [OR] в конце.

Вы можете найти больше информации на веб-сайте Apache .

1 голос
/ 26 августа 2009

В подпапках используйте только относительный URL:

RewriteEngine On
RewriteBase /folder
RewriteRule ^\?pc=1 filename.html [R=301,L]
RewriteRule ^\?pc=2 someotherfilename.html [R=301,L]

Или аналогично использованию RewriteCond, как сказал Nerdling, но использование пропуска для правил перезаписи, например:

# this will skip the two line for anything not matching ^folder/\?pc=
RewriteRule !^folder/\?pc= - [S=2] 
RewriteRule ^folder/\?pc=1 /folder/filename.html [R=301,L]
RewriteRule ^folder/\?pc=2 /folder/someotherfilename.html [R=301,L]
# anything else will be interpreted again

Или используйте правило для прекращения интерпретации для чего-либо еще:

RewriteRule !^folder/\?pc= - [L] 
RewriteRule ^folder/\?pc=1 /folder/filename.html [R=301,L]
RewriteRule ^folder/\?pc=2 /folder/someotherfilename.html [R=301,L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...