Простой URL Mod_rewrite - PullRequest
       1

Простой URL Mod_rewrite

1 голос
/ 06 октября 2010

Почему следующий файл htaccess генерирует 300 ошибок, когда этот URL-адрес называется?

URL: hxxp: //subdomain.domainame.com/keyworda/

IndexIgnore *

RewriteEngine on
RewriteRule ^([a-z]+)/$ /index.php?p=$1

Журнал ошибок: 300 hxxp: //subdomain.domainame.com/keyworda (без косой черты)

Ответы [ 3 ]

1 голос
/ 06 октября 2010

Редактировать, я пытался сделать свой ответ коротким, я не хотел, чтобы вы добавили эту строку точно Это было просто, чтобы показать, куда должен идти пропавший слеш.

RewriteRule ^/([a-z]+)/$ /index.php?p=

Я предполагаю, что вы редактируете файл .conf в вашем каталоге конфигурации apache. Ответ Чигли предполагает, что вы редактируете конфигурационный файл .htaccess для каждого каталога.

Отредактируйте файл conf так, чтобы он выглядел так:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_METHOD} ^TRACE
  RewriteRule .* - [F]
  RewriteRule ^/(test[a-z]+)/$ /index.php?id=$1 [L,R=301]
  ... your current stuff afterwords ...
</IfModule>
  • Я думаю, проблема в том, что вам нужен начальный символ '/' в вашем RewriteRule.
  • Если сначала поставить мой тест RewriteRule, он будет соответствовать.
  • Я добавил префикс «test», чтобы эта строка не мешала остальной части вашего сайта. Это облегчит выделение этого правила. Таким образом, при тестировании URL должен заканчиваться символом «/» и начинаться с «теста», чтобы он соответствовал, в дополнение к 1 или более a-z.
  • URL для проверки: hxxp: //...yourserver.../testkeyword/
  • Это должно изменить URL в вашем браузере на: hxxp: //...yourserver.../index.php? Id = testkeyword
  • Ошибка 404, которую вы видите, может означать: 1) Нет соответствующих правил, и нет файла, соответствующего вашему ключевому слову. 2) Одно или несколько правил совпадают, но полученный URL не соответствует вашим файлам php.

Как только он заработает, это настоящий RewriteRule для использования в вашем файле conf:

RewriteRule ^/([a-z]+)/$ /index.php?id=$1 [L,R=301]

Если это не работает, отредактируйте свой вопрос, чтобы включить полный код в блок, и ваша версия httpd, как это:

# httpd -v
Server version: Apache/1.3.33 (Darwin)
Server built:   Mar 20 2005 15:08:27

Наверное, это не имеет значения, но только если ...

Вот документация mod_write . В самом низу есть несколько примеров.

0 голосов
/ 06 октября 2010

Попробуйте

RewriteRule ^([a-z]+)/?$ /index.php?p=$1 [L]
0 голосов
/ 06 октября 2010

Вы можете попробовать это:

RewriteRule ^([^/]+)/?$ /index.php?p=$1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...