2010-01-07 5 views
10

A partir de maintenant, mon site web a quelques pages statiques, dont l'un est/portfolio. Entre autres choses, mon htaccess cache l'extension .html. J'aimerais ajouter un répertoire de portefeuille, mais je ne souhaite pas déplacer ma page de portefeuille existante dans le répertoire de portefeuille en tant que fichier d'index par défaut. Ma page/portfolio est l'un de mes liens annexes Google et j'ai peur que si elle est déplacée ou si l'URL change d'une manière ou d'une autre, Google considérera qu'il s'agit d'une toute nouvelle page. Mon problème est une fois que j'ajoute le répertoire/portfolio /, chaque fois que j'essaie de visiter la page d'origine/portefeuille, une barre oblique est automatiquement ajoutée et elle est liée au répertoire lui-même..htaccess, réécriture correcte du répertoire et du fichier avec le même nom

J'ai essayé d'innombrables options, l'une étant une réécriture de/portfolio/to/portfolio, cependant cela crée une boucle infinie. J'ai également essayé "DirectorySlash Off" mais cela a seulement enlevé la barre oblique finale tout en étant dans le répertoire, il n'a pas rétabli l'accès à la page d'origine/portefeuille. En fin de compte, je souhaite conserver ma page/portfolio telle quelle, en lançant des liens vers des pages du répertoire comme/portfolio/example et si on accède à/portfolio ou/portfolio/à la même page qui est en dehors du répertoire sans que Google pense qu'il s'agit d'un contenu en double.

Une question similaire existe ici: .htaccess rewriting url to page or directory même si cela a encore abouti à une boucle infinie pour moi, pour une raison quelconque, je suppose qu'il a quelque chose à voir avec les extensions cachées.

Voici mon htaccess-

 
RewriteEngine On 

# HTML to PHP 
RemoveHandler .html .htm 
AddType application/x-httpd-php .htm .html 

# Hide extension 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ $1.html 

# Force WWW 
RewriteCond %{HTTP_HOST} ^mydomain\.net 
RewriteRule ^(.*)$ http://www.mydomain.net/$1 [R=301,L] 

# Blog Subdomain 
RewriteCond %{HTTP_HOST} ^blog.mydomain.net$ 
RewriteRule ^(.*)$ http://www.mydomain.net/blog/$1 [R=301,L] 

Je sais que ce n'est pas une bonne idée d'avoir un répertoire avec le même nom comme une page statique, mais je voudrais vraiment ne pas modifier la page existante et de perdre la sitelink Google, Donc, une façon propre et appropriée de gérer cela serait une aide.

Répondre

13

Il y a deux choses qui vont "mal" ici, et deux façons de le réparer. Le premier est que apache "découvre" qu'il existe un répertoire nommé "portfolio" avant que les conditions de réécriture soient appliquées. Cela signifie que les conditions de réécriture reçoivent "portfolio /" au lieu de "portfolio".

En second lieu, la règle est d'éviter précisément la réécriture que vous voulez faire s'il est en fait un répertoire de ce nom

Solution 1 « -d! »: Les demandes Recâbler manuellement le répertoire de portefeuille enlever la barre oblique.

# Manually re-route portfolio/ requests to portfolio 
RewriteCond %{REQUEST_FILENAME} portfolio/$ 
RewriteRule ^(.*)/$ $1 

# Hide extension 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ $1.html 

Notez la suppression de la condition "! -d".

L'inconvénient est que vous avez à coder en dur le cas de bord « de portefeuille » directement dans les règles de réécriture, et entraînera encore dans le navigateur étant d'abord redirigé vers portefeuille/

Solution 2: Set DirectorySlash Off et supprimer le répertoire existe essai

# Disable Automatic Directory detection 
DirectorySlash Off 

# Hide extension 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ $1.html 

Réglage DirectorySlash Off fixerait cette question le meilleur, mais peut briser d'autres parties de votre site où vous voulez réellement le DirectorySlash automatique. Le meilleur de la chance, et j'espère que cela aide.

Remarque lors du test de la solution 2, votre navigateur peut se souvenir de la redirection de « portefeuille » à « portefeuille/» et effectuer la redirection avant qu'il envoie même la demande au serveur. Assurez-vous de tester dans un environnement clair et cache-cache pour de meilleurs résultats.

+0

Tu sais, j'ai essayé déjà. Je l'ai essayé en enlevant la ligne et en enlevant aussi le!, Et cela n'a entraîné aucun changement. Je note que je teste en utilisant ce xampp. Jusqu'à présent, seule la chose que j'ai remarquée était que je devais effacer le cache et redémarrer mon navigateur pour que certaines modifications soient prises en compte, mais je ne suis pas sûr que cela causerait des problèmes de fonctionnement. – PaulC

+0

Eh bien, je suppose qu'il n'y a pas de vraie solution pour ma situation. J'ignore à peu près ce problème jusqu'à ce que je sois confronté quand je vais télécharger mon nouveau site. J'espère que je comprendrais quelque chose d'ici là. Merci quand même pour vôtre aide. – PaulC

+0

Après quelques tests dans mon propre environnement, j'ai édité ma réponse pour montrer quelles options vous avez. –

Questions connexes