Перенаправить весь трафик на index.php с помощью mod_rewrite

Я пытаюсь создать сократитель URL, и я хочу иметь возможность принимать любые символы сразу после домена и передавать их как переменный url. Так, например,

  • http://google.com/asdf

станет

  • http://www.google.com/?url=asdf .

Вот что я имею для mod_rewrite прямо сейчас, но я продолжаю получать 400 Bad Request:

RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*) index.php?url=$1 [L,QSA] 

Попробуйте заменить ^(.*) ^(.*)$

 RewriteRule ^(.*)$ index.php?url=$1 [L,QSA] 

Изменить: Попробуйте заменить index.php на /index.php

 RewriteRule ^(.*)$ /index.php?url=$1 [L,QSA] 

ByTheWay не забудьте включить mod rewrite, в apache на ubuntu

 sudo a2enmod rewrite 

а затем перезапустите apache2

 sudo /etc/init.d/apache2 restart 

Редактирование: это старый вопрос, который помог мне, но я потерял часы, проверяя свой файл apache2.conf с одной стороны и файл .htaccess с другой стороны и все еще без света.

Попробуйте, не используя RewriteCond .

Чтобы переписать все запросы в /index.php , вы можете использовать:

 RewriteEngine on RewriteCond %{REQUEST_URI} !^/index.php$ RewriteRule ^(.+)$ /index.php?url=$1 [NC,L] 

RewriteCondition RewriteCond %{REQUEST_URI} !^/index.php$ важен, поскольку он исключает назначение переписывания, которое мы переписываем, и предотвращает бесконечную ошибку цикла.

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