htaccess редирект для удаления index.php - PullRequest
3 голосов
/ 19 марта 2012

Я хочу, чтобы пользователь мог использовать $_SERVER['PATH_INFO'] в качестве заполнителя для файла, который нужно обслуживать, и избавиться от index.php в адресной строке

Например, я хочу использовать me.com/index.php/settings1 как me.com/settings1 и так далее для любого PATH_INFO, к которому обращается пользователь.

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

Если это поможет, я использую план общего хостинга от hostgator.

На основании предложения @EddyFreddy я попробовал оба способа, упомянутых в этом вопросе, снеудачно.Вот как выглядит файл на данный момент:

suPHP_ConfigPath /home/user/php.ini
    <Files php.ini>
        order allow,deny    
        deny from all   
    </Files>

RewriteEngine On
RewriteBase /   

RewriteCond %{HTTP_HOST} ^www.mysite.com$ [NC]
RewriteRule .? http://mysite.com%{REQUEST_URI} [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L] # tried with and without the `?`

Ответы [ 2 ]

8 голосов
/ 20 марта 2012

Это может быть легко обработано mod_rewrite.Используйте этот код в .htaccess в DOCUMENT_ROOT:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# external redirect from /index.php/foo to /foo/
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php(/[^\s\?]+)? [NC]
RewriteRule ^ %1/ [L,R]

# external redirect to add trailing slash
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+((?!.+/[\s\?])[^\s\?]+) [NC]
RewriteRule ^ %1/ [L,R]

# internal forward from /foo to /index.php/foo
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^ index.php%{REQUEST_URI} [L,NC]

После того, как вы убедитесь, что все работает нормально, измените R на R=301.

1 голос
/ 19 марта 2012

После длительной оценки я узнал, что версия от анубхавы не работает для меня во всех случаях. Поэтому я попробовал эту модифицированную версию. Он будет правильно обрабатывать существующие файлы в существующих каталогах и не будет создавать двойных слешей.

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

###### Add trailing slash (optional) ######
RewriteCond %{REQUEST_URI} ^/[^\.]+[^/]$
RewriteRule ^(.*)$ $1/ [R=301,L]

###### external redirect from /index.php/foo to /foo ######
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php(/.+)?[\s\?] [NC]
RewriteRule ^ %1 [L,R=301]

###### internal forward from /foo to /index.php/foo ######
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^ index.php%{REQUEST_URI} [L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...