J'ai construit un site international et il ajoute un code de langue à la fin des URL: www.site.com/index.php/en/
J'ai activé les URL SEF et la réécriture d'URL dans la configuration globale. J'ai essayé de nombreux extraits .htaccess pour supprimer index.php, mais le message me renvoie toujours à la page introuvable. Voici l'extrait utilisé:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/index\.php/
RewriteRule ^index.php/(.*) /$1 [R,L]
S'il vous plaît me conseiller la bonne façon de supprimer index.php
et conservez le code de langue.
.htaccess code:
<IfModule mod_rewrite.c>
RewriteEngine On
#Force www:
RewriteEngine on
RewriteCond %{HTTP_Host} ^ncci-server.com [NC]
RewriteRule ^(.*)$ http://www.ncci-server.com/$1 [L,R=301,NC]
#REWRITE RULES
#---------------------
RewriteBase /MainSite/
#RULE JOOMLA! RULE 1
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteCond %{REQUEST_URI} /component/|(/[^.]*|\.(php|html?|feed|pdf|vcf|raw))$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
#remove index.php
### Redirect index.php to Root
RewriteCond %{THE_REQUEST} !^POST
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteCond %{SERVER_PORT}>s ^(443>(s)|[0-9]+>s)$
RewriteRule ^index\.php$ http%2://www.ncci-server.com/ [R=301,L]
#RULE JOOMLA! RULE 2
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
RewriteCond %{QUERY_STRING} (>|%3C)([^s]*s)+cript.*(<|%3E) [OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
<Files ^(.*)$>
ErrorDocument 403 "Forbidden"
</Files>
# STARTS WITH WEB
RewriteCond %{HTTP_USER_AGENT} ^web(Zip|emaile|enhancer|fetch|go.?is|auto|bandit|clip|copier|master|reaper|sauger|site.?quester|whack) [NC,OR]
# ANYWHERE IN UA -- GREEDY REGEX
RewriteCond %{HTTP_USER_AGENT} ^.*(craftbot|download|extract|stripper|sucker|ninja|clshttp|webspider|leacher|collector|grabber|webpictures).*$ [NC]
# ISSUE 403 / SERVE ERRORDOCUMENT
RewriteRule . - [F,L]
########## Begin - Rewrite rules to block out some common exploits
## If you experience problems on your site block out the operations listed below
## This attempts to block the most common type of exploit `attempts` to Joomla!
#
# Block out any script trying to set a mosConfig value through the URL
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
# Block out any script trying to base64_encode crap to send via URL
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
# Block out any script that includes a <script> tag in URL
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Send all blocked request to homepage with 403 Forbidden error!
RewriteRule ^(.*)$ index.php [F,L]
#
########## End - Rewrite rules to block out some common exploits
########## Begin - Common hacking tools and bandwidth hoggers block
## By SigSiu.net and @nikosdion.
# This line also disables Akeeba Remote Control 2.5 and earlier
SetEnvIf user-agent "Indy Library" stayout=1
# WARNING: Disabling wget will also block the most common method for
# running CRON jobs. Remove if you have issues with CRON jobs.
SetEnvIf user-agent "Wget" stayout=1
</IfModule>
J'utilise des hôtes virtuels Apache, donc la bonne façon d'utiliser la réécriture d'URL:
Sudo a2enmod rewrite
Editez le fichier de configuration du site Apache: Sudo nano /etc/Apache2/sites-available/default
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
Sudo service Apache2 restart
Maintenant Réécriture d'URL fonctionnera.
Ce que vous devez faire est d’activer la réécriture d’URL. Cela peut être fait dans le backend:
Configuration globale -> Site -> Utiliser la réécriture d'URL (défini sur oui)
ou directement dans le fichier configuration.php de l'instance de Joomla:
public $sef_rewrite = '1'; //1 = enabled, 0 = disabled;
Remarque: lors de l'activation de la réécriture d'URL, un fichier .htaccess doit exister à la racine du site Joomla.
Si votre site ne se trouve pas dans le dossier racine, vous devrez également annuler la mise en commentaire de la règle RewriteBase dans le fichier .htaccess et ajouter le chemin d'accès au dossier contenant votre site, par exemple:
RewriteBase /myjoomlafolder
Enfin, si vous souhaitez également supprimer le fichier index.php de la page d’accueil, par conséquent, pour supprimer les URL dupliquées de la page d’accueil, procédez comme suit:
### Redirect index.php to Root
RewriteCond %{THE_REQUEST} !^POST
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteCond %{SERVER_PORT}>s ^(443>(s)|[0-9]+>s)$
RewriteRule ^index\.php$ http%2://mysite.com/ [R=301,L]
Il ne devrait pas être nécessaire de modifier/ajouter votre .htaccess
règles pour supprimer index.php
depuis votre URL, cela fonctionne habituellement si vous activez la réécriture d’URL dans la configuration de Joomla et renommez htaccess.txt
à .htaccess
.
Bien que vous semblez avoir trouvé une solution, je voudrais ajouter une clarification sur l’utilisation de RewriteBase
dans le .htaccess
fichier:
RewriteBase /JoomlaSubFolder
Cette ligne ne doit pas être commentée ni modifiée si vous avez installé Joomla dans un sous-dossier de votre serveur (dans ce cas, ROOT/JoomlaSubFolder
). Cependant, c’est relatif à votre [~ # ~] url [~ # ~] , c’est donc seulement correct si vous accédez à votre site avec http://example.com/JoomlaSubFolder (ou http: // localhost/JoomlaSubFolder ).
Par contre, si vous avez installé Joomla dans le même sous-dossier, mais utilisez une URL unique pour accéder au site (par exemple, http://joomla.example.com , http://example2.com , ou http://www.ncci-server.com/ ), vous devriez le laisser tel quel, par défaut .htaccess
fichier:
# RewriteBase /
ou
RewriteBase /
C'est souvent le cas lorsque vous utilisez des domaines addon sur des serveurs Apache, car ceux-ci sont situés dans un sous-dossier du domaine principal, mais un domaine différent est attribué.