PHP est-il autorisé à modifier le fichier .htaccess dans le dossier actuel?

J’ai une application Web PHP située sur l’ hébergement partagé . Mon objective est de modifier le fichier .htaccess à partir du code PHP lorsque la page PHP est en cours d’exécution. J’ai besoin de ce .htaccess pour y insérer quelques lignes de mod_rewrite.

Le problème est que sur Windows + Apache je peux modifier dynamicment le fichier .htaccess mais le même code sur Linux signale un problème lorsque j’essaie d’accéder à ce fichier de quelque manière que ce soit (copie ou fopen):

"failed to open stream: Permission denied"

J’ai donné des permissions au fichier .htaccess 777 – toujours pas de résultat. Qu’est-ce qui m’empêche de faire ça? Comment puis-je développer une solution de contournement?

PS Mon objective initial était de pouvoir append une nouvelle RewriteRule dans .htaccess qui mappe un object category_id récemment ajouté avec un nouveau nom_de_catégorie.

Si ce n’était pas un hébergement partagé, j’utiliserais quelque chose comme RewriteMap (dans la configuration principale d’Apache) et je pourrais accéder au fichier de carte.

C’est la première limitation réelle que je n’ai pas pu résoudre avec PHP + Apache, mais j’espère que cela sera également possible.

Je veux suggérer autre chose qui fonctionne aussi. Au lieu d’écrire une règle pour chaque URL «spéciale», pourquoi ne pas en utiliser une pour tous?

J’ai trouvé beaucoup plus facile d’utiliser ce que WordPress utilise: chaque URL est redirigée vers l’index.

Tout ce que vous avez à faire est de configurer le fichier d’index, de le lire dans le répertoire chargé (peut-être en utilisant $ _SERVER [‘URI_REQUEST’]) et de le gérer.

append à .htaccess ceci:

  RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]  

Grâce à ce chunck, vous avez un système quelque peu illimité à votre disposition. Si jamais vous avez envie de renommer votre categrory url, ou d’append un autre cas particulier, c’est déjà prêt!

Cela semble être une solution trop complexe pour avoir simplement une page “catégorie de chargement” qui prend le nom de la catégorie de l’URL et charge l’ID correspondant.

Par exemple, si l’URL est:

 http://yoursite.com/category/programming 

Je remapperais cela à quelque chose comme:

 http://yoursite.com/category.php?name=programming 

Vous avez seulement besoin d’un petit ensemble de règles de réécriture. Faire ce que suggère le Tchad:

 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^/category/.*$ category.php [QSA] 

Ainsi, à chaque fois que quelqu’un navigue vers /category/category_id , la demande sera dirigée vers category.php , qui recevra le /category/ URI dans $_SERVER['REQUEST_URI'] , à partir duquel vous pourrez facilement obtenir l’ID de catégorie, et vous n’avez pas besoin de modifier le fichier .htaccess chaque fois que vous ajoutez une catégorie.

Bien que je sois d’accord avec les commentaires ci-dessus, cela peut certainement être fait. Les applications PHP comme WordPress le font exactement en fonction des modifications apscopes à la page des parameters. Cela doit être aussi simple que d’écrire le fichier, mais le répertoire parent doit avoir l’autorisation pour l’utilisateur du serveur Web d’y écrire.

Si cela ne fonctionne pas pour vous, vous ferez le répertoire parent soit 777 ou 775 et le groupe sera défini sur le groupe sous lequel Apache s’exécute (généralement “apache” ou “www” ou quelque chose de similaire).

Adam (commenté sur votre question) est tout à fait correct cependant, une autre couche de sécurité sur votre serveur peut vous empêcher de le faire, et c’est probablement une bonne indication que vous pourriez aborder le problème dans le mauvais sens.

Je suis d’accord avec Chad Birch. Au cas où vous ne pourriez pas être dissuadé, cependant, dans votre situation, je rechercherais d’abord des répertoires parents avec des permissions verrouillées.

FYI, l’une des raisons pour lesquelles la réécriture du fichier .htaccess est une mauvaise idée est que toutes les demandes reçues lors de la réécriture du fichier .htaccess ne seront plus appliquées.