На этот вопрос уже есть ответ здесь:
Я работал над 301 редиректом для динамического URL последние пару дней и действительно боролся.
Я хочу перенаправить example.com/?feed=podcast
на example.com/feed/podcast
Вот мой текущий файл .htaccess:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule ^feed$ "http\:\/\/example\.com\/feed\/podcast" [R=301,L]
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Я пытаюсь чтобы добавить перенаправление для динамического URL. Мне удалось заставить это работать:
RewriteCond %{QUERY_STRING} ^pizza$
RewriteRule ^$ http://www.example.com/feed/podcast? [R=301,L]
Но я не могу заставить это работать:
RewriteCond %{QUERY_STRING} ^feed=podcast$
RewriteRule ^$ http://www.example.com/feed/podcast? [R=301,L]
Это заканчивается перенаправлением обратно на example.com
Любая помощь будет очень признательна!
Это работает для меня:
Options All -Indexes
ErrorDocument 403 /Forbidden
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{QUERY_STRING} ^feed=podcast$
RewriteRule ^$ http://www.example.com/feed/podcast? [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Сначала я подумал, что вам нужно экранировать знак равенства ("=") с помощью обратной косой черты (что действительно сработало, но, как показано выше, также работает перенаправление.
C:\Apache24\htdocs>curl -s --verbose http://localhost/?feed=podcast -o null
* Hostname was NOT found in DNS cache
* Trying ::1...
* Connected to localhost (::1) port 80 (#0)
> GET /?feed=podcast HTTP/1.1
> User-Agent: curl/7.35.0
> Host: localhost
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Date: Thu, 27 Aug 2015 21:43:43 GMT
* Server Apache/2.4.10 (Win64) PHP/5.6.4 is not blacklisted
< Server: Apache/2.4.10 (Win64) PHP/5.6.4
< Location: http://www.example.com/feed/podcast
< Content-Length: 243
< Content-Type: text/html; charset=iso-8859-1
<
{ [data not shown]
* Connection #0 to host localhost left intact