2017-07-21 1 views
0

J'essaie d'ajouter mes règles de réécriture à httpd.conf et désactiver .htaccess afin d'améliorer les performances du serveur. Pour une raison quelconque, tout ce que j'ai essayé ne fonctionne pas.règles mod_rewrite dans httpd.conf ne fonctionne pas

dans mon principal httpd.conf J'ai désactivé toutes les instances de AllowOverride en les mettant à aucune.

j'ai un fichier inclus pour chaque site dans son bloc d'hôte virtuel

Include "etc/apache2/conf.d/site.com/rewrite.conf" 

puis à rewrite.conf j'ai quelque chose comme ceci:

<Directory "/home/shopmobilephones/public_html"> 
RewriteEngine On 
ServerSignature off 
# HTTP > HTTPS ######################################################################### 
RewriteCond %{HTTPS} off 
RewriteRule (.*) https://shopmobilephones.co.uk%{REQUEST_URI} [L,R=301] 
RewriteCond %{HTTP_HOST} ^/www.shopmobilephones.co.uk [NC] 
RewriteRule (.*) https://shopmobilephones.co.uk%{REQUEST_URI} [L,R=301] 
RewriteCond %{HTTP_USER_AGENT} libwww-perl.* 
RewriteRule .* ? [F,L] 

RewriteRule ^/mobiles/deals/cash-back /cashback.php [L] 
RewriteRule ^/mobiles/deals/cheap-mobile-phones /cheapmobilephones.php [L] 
RewriteRule ^/mobiles/deals/clearance-deals /clearance.php [L] 
RewriteRule ^/mobiles/deals/contracts /contractphones.php [L] 
RewriteRule ^/mobiles/deals/12-months-free-line-rental /12month.php [L] 
RewriteRule ^/mobiles/deals/top-deals /dailydeals.php [L] 
RewriteRule ^/mobiles/deals/free-phones /freephones.php [L] 
RewriteRule ^/mobiles/deals/new-mobile-phones /ladeals.php [L] 
RewriteRule ^/mobiles/deals/sim-free-phones /simfree.php [L] 
RewriteRule ^/mobiles/colours/(.*) /colours.php?colour=$1 [L] 
RewriteRule ^/mobiles/(.*)/contract-deals /dealsnew.php?slug=$1&deal-type=1&device-type=Phone&network=all [L] 
RewriteRule ^/mobiles/(.*)/upgrades /dealsnew.php?slug=$1&deal-type=2&device-type=Phone&network=all [L] 
RewriteRule ^/mobiles/(.*)/contract-deals/(.*) /dealsnew.php?slug=$1&deal-type=1&device-type=Phone&NETWORK=$2 [L] 

</Directory> 

<IfModule mod_expires.c> 
ExpiresActive On 
ExpiresByType image/jpg "access plus 1 year" 
ExpiresByType image/jpeg "access plus 1 year" 
ExpiresByType image/gif "access plus 1 year" 
ExpiresByType image/png "access plus 1 year" 
ExpiresByType text/css "access plus 1 month" 
ExpiresByType application/pdf "access plus 1 month" 
ExpiresByType text/x-javascript "access plus 1 month" 
ExpiresByType application/x-shockwave-flash "access plus 1 month" 
ExpiresByType image/x-icon "access plus 1 year" 
ExpiresDefault "access plus 2 days" 
</IfModule> 

# php -- BEGIN cPanel-generated handler, do not edit 
# Set the “ea-php56” package as the default “PHP” programming language. 
<IfModule mime_module> 
    AddType application/x-httpd-ea-php56 .php .php5 .phtml 
</IfModule> 
# php -- END cPanel-generated handler, do not edit 

J'ai essayé d'ajouter RewriteBase/et enlever tous les préfixant/cela ne fonctionne pas J'ai également retiré les règles des blocs de répertoire cela ne fonctionne pas, j'ai même ajouté les règles dans le principal httpd.conf à l'intérieur et à l'extérieur des blocs de répertoire mais rien ne fonctionne, où vais-je ?

+0

Qu'est-ce que la version Apache? –

+0

L'affirmation "rien ne fonctionne" est très générale et large, je doute que ce soit littéralement vrai. S'il vous plaît être plus précis ce que _exactly_ ne fonctionne pas. Le mieux est de donner des URL de requêtes spécifiques (anonymisées), vos attentes et les résultats réels. Ajoutez ces détails à la question s'il vous plaît, pas dans les commentaires. – arkascha

Répondre

0

A l'intérieur des serveurs http configuration hôte vous devez garder la barre oblique dans les notations de chemin, un RewriteBase ne fait pas de sens et les règles doivent être placés à l'extérieur ou une section <Directory><Location>. Vous devez supprimer la barre oblique dans le RewriteCond testant le %{HTTP_HOST}, mais vous devez échapper les caractères de point là. Il semble que certaines versions actuelles du serveur http apache ne pas définissent toujours la variable %{HTTPS} selon la documentation, vous pouvez tester le port à la place:

<VirtualHost *:443> 
    ServerName example.com 
    ServerAlias www.example.com 
    ServerAdmin [email protected] 
    # ... 
    ServerSignature off 
    DocumentRoot "/home/shopmobilephones/public_html" 

    RewriteEngine On 
    # HTTP > HTTPS & www host 
    RewriteCond %{SERVER_PORT} !^443$ 
    RewriteRule^https://shopmobilephones.co.uk%{REQUEST_URI} [R=301] 
    RewriteCond %{HTTP_HOST} ^www\.shopmobilephones\.co\.uk$ 
    RewriteRule^https://shopmobilephones.co.uk%{REQUEST_URI} [R=301] 
    RewriteCond %{HTTP_USER_AGENT} libwww-perl.* 
    RewriteRule .* ? [F,L] 

    RewriteRule ^/mobiles/deals/cash-back /cashback.php [L] 
    RewriteRule ^/mobiles/deals/cheap-mobile-phones /cheapmobilephones.php [L] 
    RewriteRule ^/mobiles/deals/clearance-deals /clearance.php [L] 
    RewriteRule ^/mobiles/deals/contracts /contractphones.php [L] 
    RewriteRule ^/mobiles/deals/12-months-free-line-rental /12month.php [L] 
    RewriteRule ^/mobiles/deals/top-deals /dailydeals.php [L] 
    RewriteRule ^/mobiles/deals/free-phones /freephones.php [L] 
    RewriteRule ^/mobiles/deals/new-mobile-phones /ladeals.php [L] 
    RewriteRule ^/mobiles/deals/sim-free-phones /simfree.php [L] 
    RewriteRule ^/mobiles/colours/(.*) /colours.php?colour=$1 [L] 
    RewriteRule ^/mobiles/(.*)/contract-deals /dealsnew.php?slug=$1&deal-type=1&device-type=Phone&network=all [L] 
    RewriteRule ^/mobiles/(.*)/upgrades /dealsnew.php?slug=$1&deal-type=2&device-type=Phone&network=all [L] 
    RewriteRule ^/mobiles/(.*)/contract-deals/(.*) /dealsnew.php?slug=$1&deal-type=1&device-type=Phone&NETWORK=$2 [L] 

    <Directory "/home/shopmobilephones/public_html"> 
    # ..... 
    </Directory> 
</VirtualHost> 

Si vous utilisez une version récente de l'apache http serveur, vous souhaiterez probablement remplacer le drapeau [L] par le drapeau [END], ce qui augmente légèrement les performances, car il empêche une boucle supplémentaire dans le moteur de réécriture lorsque cela n'est pas nécessaire.

Vous pouvez déplacer les règles de réécriture dans un fichier séparé comme vous le suggérez dans votre question, c'est très bien, il suffit de l'inclure là où les règles sont placées en ligne dans l'exemple ci-dessus.

+0

Merci d'oublier que le site a fonctionné: 443 Je n'ai bêtement pas mis le fichier include personnalisé dans le bloc VirtualHost uniquement pour le bloc sur le port 80 qui était le problème mais vous m'avez beaucoup aidé merci. – futureweb