Передача GET-параметра «unfollow» с помощью Apache mod_rewrite - PullRequest
2 голосов
/ 31 октября 2010

РЕДАКТИРОВАТЬ @mootinator проделал потрясающую работу с этим.См. Его ответ ниже.

Поскольку я не совсем ясно указал свой точный URI, он все равно может помочь людям, которые ищут что-то подобное.Мой URI больше похож на: 9/Here-is-some-text/unwatch

... в этом случае вам нужно mod_rewrite правил, которые выглядят немного более примерно так:

RewriteEngine on
RewriteRule ^([0-9]+)/([a-zA-Z0-9_-]+)/?$ index.php?id=$1 [QSA,L]
RewriteRule ^([0-9]+)/([a-zA-Z0-9_-]+)/unwatch/?$ index.php?id=$1&unwatch=1 [QSA,L]

Довольно незначительная модификация @ mootinator'sответ, но мне потребовалось несколько минут, чтобы выяснить самостоятельно.Может помочь кому-то сэкономить время на линии.


Я пытаюсь mod_rewrite передать параметр GET, своего рода логический флаг, чтобы каждый раз, когда кто-то переходил к URI/unwatch, вы можете вытащить &unwatch=1.

У меня уже есть это правило:

RewriteRule ^(\d+)/* index.php?id=$1 [L]

Я хотел бы иметь другое правило, которое выполняет что-то вроде этого:

RewriteRule ^(\d+)/unwatch index.php?id=$1&unwatch=1 [L]

«Каталог» ./unwatch - это , а не каталог вообще.Структура каталогов выглядит так:

./index.php
./.htaccess

Есть мысли о том, как это сделать?

1 Ответ

3 голосов
/ 31 октября 2010
RewriteRule ^([0-9]+)/?$ index.php?id=$1 [QSA,L]
RewriteRule ^([0-9]+)/unwatch/?$ index.php?id=$1&unwatch=1 [QSA,L]

QSA означает добавление строки запроса.Таким образом, параметры, передаваемые пользователем, не стираются.

Если я что-то упускаю, включая обход URL-адреса, который не является действительным каталогом, проверьте, как это делает CakePHP .

Рабочая демонстрация здесь с использованием следующего .htaccess:

<IfModule mod_rewrite.c>
   RewriteBase /mod_rewrite
   RewriteEngine on
   RewriteRule ^([0-9]+)/?$ index.php?id=$1 [QSA,L]
   RewriteRule ^([0-9]+)/unwatch/?$ index.php?id=$1&unwatch=1 [QSA,L]
</IfModule>

Оказывается, пространство, которое я имел в [QSA, L], вызывало ошибку 500, иЯ не вел себя так, как я ожидал.

...