Правила переписывания Apache для адресной строки - PullRequest
0 голосов
/ 22 февраля 2012

В настоящее время я пытаюсь создать правило перезаписи, которое будет отображать http://mywebsite.com/login/ в адресной строке, но на самом деле считывается с http://mywebsite.com/index.php?action=login. Я пробовал следующее:

<IfModule mod_rewrite.c>
    Options +FollowSymLinks
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([a-z0-9\-]+)/?$ /?$.php?page=$1 [L,NC]
</IfModule>

URL все еще отображается как http://mywebsite.com/index.php?action=login,.

По сути, я хочу ссылки в стиле SEO, я думаю.

1 Ответ

3 голосов
/ 23 февраля 2012

Вот что вы можете использовать (статическая версия):

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(index|blogs|projects|contact|login)/?$ index.php?action=$1 [L,NC]

Как видите, каждая "страница" жестко закодирована в правиле между ().

Вы также можете сделать его более «динамичным»:

RewriteRule ^([a-z0-9\-]+)/?$ index.php?action=$1 [L,NC]

При этом автоматически будут использоваться любые буквы (я добавил тире и цифры - например, индекс, контакт или нас) и использовать его как «действие».Таким образом, в вашем скрипте вы можете проверить, не принимается ли один из них (например, кто-то типа: not-a-good-page), а затем вы можете перенаправить на 404. Таким образом, ваш скрипт контролирует логику, а не .htaccess.

...