Проблема Mod_rewrite: Хотите перейти от? = К плоской ссылке, кажется, ничего не работает - PullRequest
0 голосов
/ 18 января 2011

У меня есть сайт, который в настоящее время отображает результаты как example.com/index.php?show=foo и я хотел бы прочитать example.com/show/foo.

Насколько я понимаю, это сделало бы их видимыми для роботов поисковых систем, и кажется, что это гораздо проще, чем создать пару сотен HTML-файлов ...

Я пробовал следующий код .htaccess:

Options +FollowSymLinks<br> RewriteEngine on<br> RewriteRule ^show/(.*)$ index.php?show=$1 [NC,L]

Без кубиков.

Также попробовал это, что я нашел в другом вопросе переполнения стека :

<IfModule mod_rewrite.c><br> RewriteEngine On<br> RewriteBase /<br> RewriteCond %{REQUEST_FILENAME} !-f<br> RewriteCond %{REQUEST_FILENAME} !-d<br> RewriteRule ^([0-9A-Za-z]+)/?$ /index.php?show=$1 [L]<br> </IfModule>

Есть идеи о том, что мне здесь не хватает?

Ответы [ 2 ]

0 голосов
/ 18 января 2011

Я делаю что-то подобное на сайтах, которые используют «дружественные к SEO» URL.

В .htaccess:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /index.php [L]

Тогда на index.php:

if ($_SERVER['REQUEST_URI']=="home") {
    include ("home.php");
}

Правило .htaccess говорит ему загрузить index.php, если запрошенный файл или каталог не найден. Затем вы просто анализируете URI запроса, чтобы решить, что должен делать index.php.

Вы на правильном пути, но у вашего правила есть проблемы. .* довольно все включено. Начните там и, если нужно, сделайте более строгие ограничения.

0 голосов
/ 18 января 2011

Обратите внимание, что ^([0-9A-Za-z]+)/?$ будет пытаться сопоставить URI запроса, который включает только буквенно-цифровые символы, необязательно завершаемые слэшем. Поэтому URI show/foo не будет сопоставляться, поскольку в конце имеется больше символов (т. Е. После косой черты, где выражение ожидает найти конец строки).

Попытка:

RewriteRule ^show/([0-9A-Za-z]+)/?$ /index.php?show=$1 [L]

Кроме того, чтобы получить дополнительные параметры запроса, вы можете сделать:

RewriteRule ^show/([0-9A-Za-z]+)/?$ /index.php?show=$1&%{QUERY_STRING} [L]

Это означает, что URL, такой как /show/page?id=1, переписывается на /index.php?show=page&id=1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...