htaccess - переписать для захвата дружественного URL или строки запроса - PullRequest
3 голосов
/ 24 июня 2011

Я пытаюсь придумать одно или несколько правил перезаписи, которые будут принимать либо дружественный URL, либо URL, содержащий полную строку запроса.
План состоит в том, чтобы создать текстовую страницу, читая URL-адрес с использованием PHP loadHTML.

Например:

Input

1. http://www.example.com/disclaimer (http://www.example.com/text/disclaimer on text-only version)
2. http://www.example.com/info/aboutus (http://www.example.com/text/info/aboutus on text-only version)
3. http://www.example.com/news?id=123 (http://www.example.com/text/news?id=123 on text-only version)

выход

1. http://www.example.com/includes/textonly.php?page=disclaimer
2. http://www.example.com/includes/textonly.php?page=info/aboutus
3. http://www.example.com/includes/textonly.php?news?id=123

Так что в textonly.php я бы использовал $ _GET ['page']); например, 1) и 2), и используйте $ _SERVER ['QUERY_STRING']; например 3).

Например, 1) и 2) я придумал:

RewriteRule ^text/(.*) includes/textonly.php?page=$1

А к примеру 3) я придумал:

RewriteRule ^text/(.[?]) /includes/textonly.php [QSA]

Они работают независимо, но не вместе. Кто-нибудь может помочь?

Ответы [ 3 ]

1 голос
/ 28 июня 2011

Под руководством Тома и Майкла вот что я придумал:

в Htaccess отправьте все в PHP в строке запроса:

RewriteRule ^text/(.*) /includes/textonly.php [QSA,L]

Тогда в PHP:

$page = 'http://'.$_SERVER['HTTP_HOST'].'/'.str_replace('/text/','',$_SERVER['REQUEST_URI']);

Кажется, работает как для дружественных URL (до сих пор тестировались на 2 уровнях), так и для строк запросов. Надеюсь, все в порядке, так что я пойду с этим в качестве решения :)

0 голосов
/ 24 июня 2011

Я бы изменил ваше правило переписывания, чтобы оно выглядело так:

RewriteRule ^([^/\.]+)/?([^/\.]+)?/?$ /includes/textonly.php?page=$1&id=$2 [L,NC]

Затем немного измените ваши входные URL-адреса, чтобы они выглядели так:

1. http://www.example.com/disclaimer
2. http://www.example.com/info/aboutus
3. http://www.example.com/news/123

И они будут указывать на этиURL-адреса:

1. http://www.example.com/includes/textonly.php?page=disclaimer&id=
2. http://www.example.com/includes/textonly.php?page=info&id=aboutus
3. http://www.example.com/includes/textonly.php?page=news&id=123

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

Одновременное управление всеми тремя URL-адресами сделает вашу логику чище на странице textonly.php, поскольку вы этого не делаетенужно написать специальную логику для первых двух URL по сравнению с последними.

0 голосов
/ 24 июня 2011

Я предлагаю передать управление PHP - я написал статью об этом некоторое время назад - http://tomsbigbox.com/elegant-url-rewriting/ - в нем подробно описывается, как отправить строку запроса в файл PHP, который затем решает, что делать - так что если страница существует, например, она загрузит ее, в противном случае сделайте что-нибудь еще.

Я считаю, что это лучшее решение для перезаписи URL.

...