3 votes

Suppression du slash final dans apache pour le répertoire

J'ai l'url suivante www.example.com/advice/ Maintenant, remarquez le slash à la fin de l'url ? J'aimerais que cela soit supprimé et que ce soit quelque chose comme www.example.com/advice . Maintenant, lorsque j'entre cette URL dans le navigateur, je suis redirigé vers l'URL avec barre oblique, même avec curl par exemple. Je sais maintenant que le slash de fin est ajouté parce que advice est un répertoire réel.

[steve@dev dev.www.example.com]$ curl -I  https://dev.www.example.com/advice -k
  HTTP/1.1 301 Moved Permanently
  Date: Fri, 25 Nov 2016 08:20:11 GMT
  Server: Apache/2.4.6 (CentOS)
  Location: https://dev.www.example.com/advice/
  Cache-Control: max-age=0
  Expires: Fri, 25 Nov 2016 08:20:11 GMT
  Connection: close
  Content-Type: text/html; charset=iso-8859-1

[steve@dev dev.www.example.com]$ curl -I https://dev.www.example.com/advice/ -k
HTTP/1.1 200 OK
Date: Fri, 25 Nov 2016 08:21:19 GMT
Server: Apache/2.4.6 (CentOS)
X-Powered-By: PHP/5.6.27
Set-Cookie: flarum_session=mfbou2hcbvcobhncnaqlvl9bm7; Path=/; HttpOnly
X-CSRF-Token: WV69M1oi8POqOcXi6MvwKhbJQ72Tmo2WpFn3oxwq
Content-Length: 10339
Cache-Control: max-age=0
Expires: Fri, 25 Nov 2016 08:21:19 GMT
Vary: Accept-Encoding
Access-Control-Allow-Origin: *.example.com
Connection: close
Content-Type: text/html; charset=UTF-8

Ce que j'ai essayé jusqu'à présent


A l'intérieur du .htacess que j'ai essayé :

DirectorySlash Off

Ce qui a donné lieu à un 403 sans le slash

[steve@dev dev.www.example.com]$ curl -I https://dev.www.example.com/advice -k
  HTTP/1.1 403 Forbidden
  Date: Fri, 25 Nov 2016 08:53:15 GMT
  Server: Apache/2.4.6 (CentOS)
  Connection: close
  Content-Type: text/html; charset=iso-8859-1

J'ai également ajouté la règle de réécriture suivante mais rien n'a changé

RewriteRule ^.*(advice)\/$ $1 [L,R=301]

Plus d'informations


Maintenant advice est l'endroit où j'ai installé une plateforme de forum, dans le même répertoire j'ai installé un CMS, quelque chose comme ci-dessous

 advice
    admin.php
    api.php
    assets
    composer.json
    composer.lock
    config.php
    CONTRIBUTING.md
    index.php <-- Forum entry point
    LICENSE
    Procfile
    readme.md
    scripts
    storage
    Vagrantfile
    vendor
 assets
 cms
 codeception.yml
 commands
 composer.json
 composer.lock
 crontask
 dropzone
 email-helpers
 favicon.ico
 framework
 gridfield-bulk-editing-tools
 gridfieldextensions
 index.php <-- CMS Entry point
 kickassets
 liveseo
 minify
 README.md
 reports
 setup.php
 shortcodable
 silverstripe-cache
 siteconfig
 _ss_environment.php
 tests
 themes
 trait-loader
 vendor
 web.config

Version d'Apache Apache/2.4.6 (CentOS)

Vous pouvez trouver les conseils .htaccess aquí et celui dans le cms aquí

Si cela peut aider, le CMS est rayure argentée et le forum est flarum

0 votes

J'ai également ajouté quelques informations supplémentaires RewriteRule ^.*advice\/$ about-us [r=301,nc] juste pour le tester, il ne redirige pas vers la page about-us.

5voto

MrWhite Points 11269

Si vous supprimez la barre oblique d'un répertoire et que vous souhaitez toujours obtenir le document d'index du répertoire (dans ce répertoire), vous devrez "corriger" manuellement l'URL en effectuant une réécriture interne vers le document d'index. (En gros, vous devez refaire ce que vous avez défait en tournant le DirectorySlash Off .)

Essayez quelque chose comme ce qui suit avant d'autres directives mod_rewrite dans la racine .htaccess archivo:

DirectorySlash Off

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_FILENAME}/index.php -f
RewriteRule (.*) $1/index.php [L]

Pour toutes les demandes de répertoires physiques, qui ne se terminent pas par une barre oblique où index.php existe dans ce répertoire, puis réécrit en interne vers index.php .

Une autre solution consiste à ajouter la barre oblique de fin (via une réécriture interne) et à permettre à mod_dir d'envoyer une sous-demande à la section DirectoryIndex . Par exemple :

RewriteRule (.*) $1/ [L]

En supposant que vous ayez un DirectoryIndex (ce qui est probablement le cas si cela fonctionnait auparavant), mod_dir réécrit alors en interne la requête (strictement une sous-requête) de la manière suivante /advice/ a /advice/index.php . Cependant, comme il s'agit maintenant d'un processus en deux étapes, autant le faire en une seule fois avec mod_rewrite (à moins que vous n'ayez des documents d'indexation de répertoire variables).


Ce qui précède est un cas général pour tous les répertoires. Vous pourriez être plus spécifique et vérifier uniquement pour le répertoire/URL en question :

RewriteRule ^advice$ advice/index.php [L]

Si la demande porte sur /advice puis réécriture interne en /advice/index.php - cela ne vérifie pas s'il s'agit d'un répertoire, cela est simplement supposé.

0 votes

J'obtiens 403 interdites lorsque j'utilise les règles de réécriture que vous m'avez indiquées. Je vous prie de bien vouloir m'excuser pour cette erreur. Alternatively, you could just append the trailing slash (via an internal rewrite) and then allow mod_dir to issue a subrequest to the DirectoryIndex.

0 votes

Assurez-vous que le cache de votre navigateur est vidé. Ceux-ci devront être placés vers le haut de la page d'accueil du site. .htaccess à la racine du document (et non pas celui qui se trouve dans le fichier /advice ) - désolé, je viens de remarquer votre commentaire suggérant les deux sous-répertoires distincts. .htaccess des dossiers. Je vais mettre à jour ma réponse concernant le dernier commentaire.

0 votes

Hmm, je viens d'essayer ça, mais ça ne marche toujours pas (je l'ai mis en haut) et j'utilise curl aussi pour tester et m'assurer que je n'ai pas de problèmes avec le cache de bower.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X