web-dev-qa-db-ja.com

apache mod_rewriteが機能していないか、有効になっていません

Rewrite_moduleをインストールし、php.iniをApacheに変更しました。

rewrite.phpおよび.htaccessファイルを作成しましたが、機能していません。

私のファイルシステムフォルダは次のようなものです:

/var/www/html
/var/www/html/test
/var/www/html/test/.htaccess
/var/www/html/test/rewrite.php

/var/www/html/.htaccessのコンテンツは次のとおりです。

$ cat /var/www/html/test/.htaccess 

RewriteEngine On 
RewriteRule ^link([^/]*).html$ rewrite.php?link=$1 [L]

/var/www/html/rewrite.php

$ cat /var/www/html/test/rewrite.php 

<html>
<h2 align=center> 
<?php 
// mod_rewrite Test Page 
// Copyright 2006 Webune.com 
if($_GET['link']==1){echo"You are not using mod_rewrite";} 
elseif($_GET['link']==2){echo"Congratulations!! You are using Apache mod_rewrite";} 
else{echo"Linux Apache mod_rewrte Test Tutorial";} 
?> 
</h2> 
<hr> 
<head> 
<title>How To Test mod_rewrite in Apache Linux Server</title> 
</head> 
<body> 
<p align="center">by <a href="http://www.webune.com">Webune</a></p> 
<p><a href="rewrite.php?link=1">LINK1</a> = rewrite.php?link=1</p>
<p><a href="link2.html">LINK2</a> = link2.html</p> 
<p>How this works: both links are for this same page, except they both are different. link one is without the mod_rewrite and link2 is using mod_rewrite. Link1 show the php file, with with mod_rewrite we are mascarading the php file into a html file. you can use whatever type of extension you want, you can change it to .htm or .shtml etc... all you have to do is to make sure you also chang it in the .htaccess file</p> 
<p>&lt;&lt; <a href="http://www.webune.com/forums/viewtopic-p-62.html">Go back to webune forums.</a></p> 
</body> 
</html>

mod_rewrite.soがインストールされます。

$ ls -l mod_rewrite.so
-rwxr-xr-x 1 root root 59256 Sep 20 23:34 mod_rewrite.so

rewrite_moduleがロードされます。

$ cat /etc/httpd/conf/httpd.conf | grep mod_rewrite.so
LoadModule rewrite_module modules/mod_rewrite.so

AllowOverride設定

$ cat /etc/httpd/conf/httpd.conf
<Directory "/var/www/html">
    Options Indexes FollowSymLinks

    AllowOverride None

    Order allow,deny
    Allow from all
</Directory>
43
rc1021

「AllowOverride All」を設定してみてください。

85
Jarrod

してみてください

Sudo a2enmod rewrite

または正しいApache再起動コマンドを使用します

Sudo /etc/init.d/Apache2 restart 
11
ASHOK

動いています。

私の解決策は:

1. test.confを/etc/httpd/conf.d/test.confに作成します

2.次のようなルールを書きました:

<Directory "/var/www/html/test">
RewriteEngine On
RewriteRule ^link([^/]*).html$ rewrite.php?link=$1 [L]
</Directory>

3. Apacheサーバーを再起動します。

4.自分でもう一度試してください。

4
rc1021

Apache 2.4でmod_rewriteが機能するようにするには、以下に「すべての許可が必要」行を追加する必要がありました。

<Directory /var/www>
   # Required if running Apache > 2.4
   Require all granted

   RewriteEngine on 
   RewriteRule ^cachebust-([a-z0-9]+)\/(.*) /$2 [L] 
 </Directory>

あなたがそれを使用している場合、Apache 2.2にも同様の要件が存在すると思われます:

<Directory /var/www>
   # Required if running Apache 2.2
   Order allow,deny
   Allow from all

   RewriteEngine on 
   RewriteRule ^cachebust-([a-z0-9]+)\/(.*) /$2 [L] 
 </Directory>

ErrorDocument 404ディレクティブはこれらのことをオーバーライドすることもあるので、動作しない場合は、ErrorDocumentディレクティブをコメントアウトして、動作するかどうかを確認してください。上記の例を使用して、パスにサブフォルダーを含めることで、サイトがキャッシュから提供されないようにすることができますが、ファイルはサーバーのルートにあります。

1
Brad Parks

CentOS7では、ファイル/etc/httpd/conf/httpd.confを変更しました

allowOverride NoneからAllowOverride Allに

0
njoshsn