На сервере LAMP я хочу, чтобы URL http://example.com/index.php был переписан на http://example.com. Как мне это сделать? - PullRequest
1 голос
/ 22 сентября 2010

На сервере LAMP я хочу, чтобы URL

<a href="http://example.com/index.php" rel="nofollow noreferrer">http://example.com/index.php</a>
был переписан просто
<a href="http://example.com" rel="nofollow noreferrer">http://example.com</a>

Мой текущий файл .htaccess выглядит следующим образом ...

IndexIgnore *

ErrorDocument 400 /index.php?module=error&action=error
ErrorDocument 401 /index.php?module=error&action=error
ErrorDocument 403 /index.php?module=error&action=error
ErrorDocument 404 /index.php?module=error&action=error
ErrorDocument 500 /index.php?module=error&action=error

RedirectMatch 301 ^/media/$ /
RedirectMatch 301 ^/media/documents/$ /
RedirectMatch 301 ^/media/graphics/$ /
RedirectMatch 301 ^/media/photos/$ /
RedirectMatch 301 ^/library/$ /
RedirectMatch 301 ^/library/css/$ /
RedirectMatch 301 ^/library/ht/$ /
RedirectMatch 301 ^/library/js/$ /
RedirectMatch 301 ^/library/php/$ /

RewriteEngine on
RewriteBase /

RewriteRule ^home$ /index.php?module=home&action=frontpage
RewriteRule ^home/$ /index.php?module=home&action=frontpage
RewriteRule ^home/([^/\.]+)$ /index.php?module=home&action=$1
RewriteRule ^home/([^/\.]+)/$ /index.php?module=home&action=$1

RewriteRule ^cv$ /index.php?module=home&action=cv
RewriteRule ^cv/$ /index.php?module=home&action=cv

RewriteRule ^release$ /index.php?module=release&action=release
RewriteRule ^release/$ /index.php?module=release&action=release

RewriteRule ^photos$ /index.php?module=gallery&action=album&album=general
RewriteRule ^photos/$ /index.php?module=gallery&action=album&album=general

RewriteRule ^gallery$ /index.php?module=gallery&action=album&album=general
RewriteRule ^gallery/$ /index.php?module=gallery&action=album&album=general
RewriteRule ^gallery/([^/\.]+)$ /index.php?module=gallery&action=album&album=$1
RewriteRule ^gallery/([^/\.]+)/$ /index.php?module=gallery&action=album&album=$1
RewriteRule ^gallery/([^/\.]+)/([^/\.]+)$ /index.php?module=gallery&action=album&album=$1$&page=$2
RewriteRule ^gallery/([^/\.]+)/([^/\.]+)/$ /index.php?module=gallery&action=album&album=$1$&page=$2
RewriteRule ^gallery/([^/\.]+)/([^/\.]+)/([^/\.]+)$ /index.php?module=gallery&action=item&album=$1$&page=$2&item=$3
RewriteRule ^gallery/([^/\.]+)/([^/\.]+)/([^/\.]+)/$ /index.php?module=gallery&action=item&album=$1$&page=$2&page=$3

RewriteRule ^handouts$ /index.php?module=home&action=handouts
RewriteRule ^handouts/$ /index.php?module=home&action=handouts

RewriteRule ^links$ /index.php?module=home&action=links
RewriteRule ^links/$ /index.php?module=home&action=links

RewriteRule ^contact$ /index.php?module=home&action=contact
RewriteRule ^contact/$ /index.php?module=home&action=contact

RewriteRule ^login$ /index.php?module=authentication&action=login
RewriteRule ^login/$ /index.php?module=authentication&action=login
RewriteRule ^logout$ /index.php?module=authentication&action=logout
RewriteRule ^logout/$ /index.php?module=authentication&action=logout

RewriteRule ^copyright$ /index.php?module=home&action=copyright
RewriteRule ^copyright/$ /index.php?module=home&action=copyright

RewriteRule ^error$ /index.php?module=error&action=error
RewriteRule ^error/$ /index.php?module=error&action=error

Какя должен отредактировать мой файл .htaccess, чтобы выполнить это основное переписывание?Кроме того, любая другая обратная связь относительно моего кода .htaccess будет принята с благодарностью.

Заранее спасибо!

1 Ответ

0 голосов
/ 22 сентября 2010
RewriteRule ^/index.php$ /

, но это не имеет смысла, поскольку / может служить index.php.если в вашем каталоге есть файл index.php и вы не хотите использовать его по умолчанию, это очень странная конфигурация!но возможно, конечно ... если вы указали разные DirectoryIndex в конфигурации вашего веб-сервера.

возможно, вы хотите перенаправить index.php на / ???

в этом случае вы можете добавить RedirectMatch в вашу конфигурацию, например RedirectMatch 301 ^/index.php$ /, но я бы рекомендовал сделать это в вашем php-файле, непосредственно смотря на ваш $_SERVER["REQUEST_URI];, но это вопрос стиля.лично я хотел бы иметь как можно больше контроля над своим приложением, и переходить к конфигурации сервера, только если он быстрее или необходимее ...

РЕДАКТИРОВАТЬ:

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

Redirect / RedirectMatch не сработает, потому что вы не можете сделать это условно, где вы можете проверить фактический URI запроса.Кроме того, окончательно обработанный URL будет использоваться для перенаправления.что означает ПОСЛЕ перенаправления на index.php через apache через директиву DirectoryIndex.поэтому эти методы не смогут определить разницу между / и /index.php.

, поэтому вам нужно сделать это либо в своем php-файле,

version 1:

Посмотрите, если $_SERVER['REQUEST_URI'] оканчивается на index.php, это произойдет только в том случае, если оно действительно запрошено (введено в строку браузера).там вы можете выполнить переадресацию с помощью header("Location: ...").

версии 2:

с использованием mod rewrite, которая также может выполнять перенаправления и может выполнять условия.во включенном конфигураторе у вас есть (DirectoryIndex) для демонстрационных целей.На самом деле вам нужна только строка RewriteCond и RewriteRule.

DirectoryIndex index.php

RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://www.yourdomain.com/ [R=301,L]

Я не уверен, можно ли покинуть ваш домен и просто наберите /, вы можете посмотреть это.это произойдет только в том случае, если URL запроса фактически равен /index.php, примените rewriterule, который выполняет перенаправление.

...