Я хочу, чтобы пользователь мог использовать $_SERVER['PATH_INFO']
в качестве заполнителя, для которого файл должен служить и избавляться от index.php в адресной строке
Например, я хочу служить me.com/index.php/settings1
как me.com/settings1
и т. Д. Для любого PATH_INFO, к которому пользователь идет.
Как я могу написать это как правило htaccess? Я даже не знаю, с чего начать
Если это помогает, я принимаю хостинг-хостинг.
Основываясь на предложении @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 `?`
Это может быть легко обработано 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} ^[AZ]{3,}\s/+index\.php(/[^\s\?]+)? [NC] RewriteRule ^ %1/ [L,R] # external redirect to add trailing slash RewriteCond %{THE_REQUEST} ^[AZ]{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
.
После долговременной оценки я узнал, что версия из анубхавы не работает для меня во всех случаях. Поэтому я попробовал эту модифицированную версию. Он будет обрабатывать существующие файлы в существующих источниках правильно и не производит двойных слэшей.
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} ^[AZ]{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]