перенаправление всех динамических URL на страницу индекса - PullRequest
2 голосов
/ 28 марта 2012

, поскольку я хочу перенаправить все динамические URL-адреса, такие как http://www.mysite.com/play.php?id=4820 на http://www.mysite.com/

У меня так много динамических URL, что я не хочу, чтобы мой пользователь видел страницу, такую ​​как страница не найдена и т. Д., Поэтому, когда пользователь пытается получить доступ к динамическому URL, как указано выше, его следует перенаправлять на домашнюю страницу. пожалуйста, кто-нибудь может сказать мне, как добиться этого с помощью .htaccess

С уважением, phphuger.

Ответы [ 3 ]

1 голос
/ 29 марта 2012

Включите mod_rewrite и поместите этот код в ваш .htaccess под DOCUMENT_ROOT:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+play\.php[\s\?] [NC]
RewriteRule ^ / [L,R]
0 голосов
/ 28 марта 2012

РЕДАКТИРОВАТЬ2

Хорошо, теперь я думаю, что понимаю ваш вопрос.

У вас есть url в play.php, который раньше обрабатывал все ваши URL, и вы хотите, чтобы онибыть перенаправлены на домашнюю страницу.

Вот два возможных решения.Это первое:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/play.php* [NC]
RewriteRule . /? [L,R=301]
</IfModule>

Выше будет перенаправлять любые запросы play.php на вашу домашнюю страницу с помощью перенаправления 301, что означает, что перенаправление является постоянным.Это отличается от перенаправления 302, которое является временным.Поэтому важно перенаправить, используя 301.

Также в этом правиле перезаписи нам не важно, существует URL или нет.Таким образом, вам не нужно иметь настоящий файл play.php или что-то еще.Он просто совпадает в зависимости от URL.

В строке для RewriteRule в конце стоит вопросительный знак, это означает удаление строки запроса из URL при перенаправлении.Я предполагаю, что вы не хотите, чтобы строка запроса переносилась.

[NC] для сопоставления без учета регистра, поэтому /PlAy.php также будет перенаправлен

Альтернативой является использованиедиректива Redirect:

Redirect 301 /play.php http://www.mysite.com/

Это сделает перманентное перенаправление 301 на вашу домашнюю страницу, если пользователь попытается перейти на play.php.Единственным недостатком этого является то, что строка запроса отображается.Вы можете добавить знак вопроса в конце, и он сотрет строку запроса.К сожалению, вопросительный знак остается.

Если у вас несколько конечных точек, а не просто play.php, вы можете сделать следующее:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/play\.php* [NC, OR]
RewriteCond %{REQUEST_URI}  ^/another_url\.php* [NC]
RewriteRule . /? [L,R=301]
</IfModule>

Этот RewriteRule будет соответствовать play.php или another_url.php и do 301 перенаправляют на вашу домашнюю страницу.

В качестве альтернативы:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/(play|another_url)\.php* [NC]
RewriteRule . /? [L,R=301]
</IfModule>

Вот альтернатива с использованием директивы Redirect

Redirect 301 /play.php http://www.mysite.com/
Redirect 301 /another_url.php http://www.mysite.com/

Альтернатива, которую вы также можете использоватьдиректива RedirectMatch для использования выражений регулярных выражений (заметьте, я на самом деле не проверял это)

RedirectMatch 301 /(play|another_url)\.php http://www.mysite.com/

EDIT

Игнорировать этот ответ.Я неправильно понял ваш вопрос.Следующее перенаправляет все запросы на index.php, если только файл или каталог не существует, что сейчас не то, что вы хотите, когда я прочитал ваш вопрос.

Вот как это делает Wordpres.Я полагаю, что у Zend и Joomla есть варианты этого.

# 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
0 голосов
/ 28 марта 2012

Я думаю, что это должно сделать.

RewriteRule ^\?.*$    http://www.mysite.com
...