У меня есть сотни динамически создаваемых URL-адресов - foo.com/123, foo.com/contact и т. Д.
Я хотел бы перенаправить все эти URL-адреса (не знаю их всех, просто знайте, что есть буквы a-z или 1-9) только на foo.com.
Пожалуйста, дайте мне знать, как это можно сделать с помощью правил перезаписи apache
Я пытался : RewriteRule ^(.*)$ index.php
Но это не работает.
Ваше правило перезаписи вызовет бесконечный цикл, потому что index.php также соответствует ^(.*)$
. У вас должно получиться сделать это примерно так (не проверено):
RewriteCond %{REQUEST_URI} !index.php
RewriteRule ^(.*)$ /index.php [R=301]
Дополнительные [R=301]
вернет код статуса перенаправления "постоянно перемещенный".
Как ответил Брайан выше:
RewriteCond %{REQUEST_URI} !index.php
RewriteRule ^(.*)$ /index.php [R=301]
Как было предложено Крисом выше:
RewriteCond %{REQUEST_URI} !index.php
RewriteRule ^(.*)$ /index.php [R=307]
Если вы пытаетесь выполнить внутреннее перенаправление, когда URL-адрес НЕ переписывается в браузере:
RewriteCond %{REQUEST_URI} !index.php
RewriteRule ^(.*)$ /index.php
Метод Брайана выполнит 301 редирект. Это сообщит любой поисковой системе / браузеру / кешу, что контент был перемещен навсегда, существующий URL-адрес исчез и не должен использоваться. Метод Криса выполнит 307 редирект. 307 - это HTTP / 1.1 эквивалент временного перенаправления. Оба будут перезаписывать URL-адрес в браузере, оба будут иметь эффект, что человек перейдет на сайт, щелкнет этот URL-адрес и будет перенаправлен на новый URL-адрес foo.com/index.php. Последний метод выполнит внутреннюю перезапись URL-адреса, чтобы URL-адрес в браузере оставался foo.com/contact, а не foo.com/index.php.
Ни одно из правил на самом деле не передает никаких параметров в index.php, поэтому перенаправления 301 и 307 фактически потеряют оставшуюся часть URL-адреса. Если вы используете переадресацию 301/307 для перенаправления всего на страницу дорвея, такое поведение может быть приемлемым. Если это ваше намерение, я бы предложил использовать:
ErrorDocument 404 /index.php
а затем убедитесь, что все изображения / ссылки относительно / абсолютно связаны на этой странице, или вы используете, чтобы убедиться, что URL-адреса правильно переписаны на полученной странице.
Если вы хотите передать запрошенный URI в index.php в качестве параметра для синтаксического анализа:
RewriteCond %{REQUEST_URI} !index.php
RewriteRule ^(.*)$ /index.php?page=$1
В этом случае $ _REQUEST ['page'] будет содержать / contact из foo.com/contact
Судя по структуре его URL-адресов, он, вероятно, не хочет [R = 301], поскольку пытается сделать красивые URL-адреса.