下記のような静的ページが複数あります。(○○○.htmlは複数ページ)
hogehoge.jp/abc/○○○.html
hogehoge.jp/abc/def/○○○.html
下記のような動的ページが複数あります(PATH_INFOを使用して、静的ページに見せています)
hogehoge.jp/abc/xyz/○○○.html
この動的ページをhogehoge.jp/abc/○○○.htmlと見せることはできないでしょうか、
勿論静的ページと動的ページのファイルネームは違う名前になっています。
Apacheが起動できなくなるのは、おそらくRewriteBaseが原因ではないかと思います。
RewriteBaseをどこに書いているでしょうか?
「directory」ディレクティブと「.htaccess」でのみ使用できます。
http://httpd.apache.org/docs/2.2/ja/mod/mod_rewrite.html#rewrite...
http://httpd.apache.org/docs/2.2/ja/mod/directive-dict.html#Cont...
>○○○.html は複数あるために、どうしてよいのか分かりません。
実行するCGI(PHP?)のアドレスと見せかけたい静的ファイルのアドレスには、何か規則性はあるのでしょうか?
規則がない場合は、面倒でも各ファイル用にRewriteRuleを記述するしかないと思います。
例えば、
「hogehoge.jp/abc/hogehoge.cgi?dir=xyz&mode=○&page=△」を実行すると生成される「hogehoge.jp/abc/xyz/○_△.html」を「hogehoge.jp/abc/○○○.html」に見せかけたい
「hogehoge.jp/abc/hogehoge.cgi?dir=uvw&mode=◎&page=●」を実行すると生成される「hogehoge.jp/abc/uvw/◎_●.html」を「hogehoge.jp/abc/def/○○○.html」に見せかけたい
「hogehoge.jp/abc/hogehoge.cgi?dir=rst&mode=□&page=×」を実行すると生成される「hogehoge.jp/abc/rst/□_×.html」を「hogehoge.jp/abc/ghi/○○○.html」に見せかけたい
・・・という場合には規則性がないので、それぞれのRewriteRuleを記述する必要があります。
RewriteEngine On
RewriteBase /
RewriteRule ^abc/○○○.html$ /abc/hogehoge.cgi?dir=xyz&mode=○&page=△ [L]
RewriteRule ^abc/def/○○○.html$ /abc/hogehoge.cgi?dir=uvw&mode=◎&page=● [L]
RewriteRule ^abc/ghi/○○○.html$ /abc/hogehoge.cgi?dir=rst&mode=□&page=× [L]
※「httpd.conf」の「directory」ディレクティブ内に記述します。
例えば、
「hogehoge.jp/abc/hogehoge.cgi?dir=xyz&mode=○&page=△」を実行すると生成される「hogehoge.jp/abc/xyz/○_△.html」を「hogehoge.jp/abc/○_△.html」に見せかけたい
「hogehoge.jp/abc/hogehoge.cgi?dir=xyz&mode=◎&page=●」を実行すると生成される「hogehoge.jp/abc/xyz/◎_●.html」を「hogehoge.jp/def/◎_●.html」に見せかけたい
「hogehoge.jp/abc/hogehoge.cgi?dir=xyz&mode=□&page=×」を実行すると生成される「hogehoge.jp/abc/xyz/□_×.html」を「hogehoge.jp/ghi/□_×.html」に見せかけたい
・・・と言う場合には、次のように1つにまとめる事が出来ます。
RewriteEngine On
RewriteBase /
RewriteRule ^[a-z]{3}/(.*)_(.*)\.html$ /abc/hogehoge.cgi?dir=xyz&mode=$1&page=$2 [L]
※細かいやり取りが必要になりそうですので、コメント欄を開けてくださると助かります。
可能です。
「hogehoge.jp」のルートに「.htaccess」を置いた場合、以下のような記述になります。
RewriteEngine on
RewriteRule ^abc/○○○.html /abc/hogehoge.cgi [L]
※「/abc/hogehoge.cgi」の部分は、「hogehoge.jp/abc/xyz/○○○.html」を生成するアドレスにします。
上記の記述で、「hogehoge.jp/abc/○○○.html」にアクセスした場合に、「hogehoge.jp/abc/hogehoge.cgi」を実行して表示します。(※アドレスは変わりません。)
すいません、ありがとうございます。
○○○.html は複数あるために、どうしてよいのか分かりません。
ちなみに.htaccessは使用せず、httpd.confに直接書き込んでいます
テストしていませんが、
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9_]+)/(.*) $1/xyz/$2
これでたぶん行けると思います。
3,4行目で、そのファイル名が実在しているか確認して、なかった場合のみ、
リクエストを書き換えていますので、混雑することはないと思います。
ありがとうございます。
これの必要な部分を編集しhttpd.confに書き込んでApacheの
再起動をすると、起動できなくなります。
どこか、間違っている部分は無いでしょうか。
Apacheが起動できなくなるのは、おそらくRewriteBaseが原因ではないかと思います。
RewriteBaseをどこに書いているでしょうか?
「directory」ディレクティブと「.htaccess」でのみ使用できます。
http://httpd.apache.org/docs/2.2/ja/mod/mod_rewrite.html#rewrite...
http://httpd.apache.org/docs/2.2/ja/mod/directive-dict.html#Cont...
>○○○.html は複数あるために、どうしてよいのか分かりません。
実行するCGI(PHP?)のアドレスと見せかけたい静的ファイルのアドレスには、何か規則性はあるのでしょうか?
規則がない場合は、面倒でも各ファイル用にRewriteRuleを記述するしかないと思います。
例えば、
「hogehoge.jp/abc/hogehoge.cgi?dir=xyz&mode=○&page=△」を実行すると生成される「hogehoge.jp/abc/xyz/○_△.html」を「hogehoge.jp/abc/○○○.html」に見せかけたい
「hogehoge.jp/abc/hogehoge.cgi?dir=uvw&mode=◎&page=●」を実行すると生成される「hogehoge.jp/abc/uvw/◎_●.html」を「hogehoge.jp/abc/def/○○○.html」に見せかけたい
「hogehoge.jp/abc/hogehoge.cgi?dir=rst&mode=□&page=×」を実行すると生成される「hogehoge.jp/abc/rst/□_×.html」を「hogehoge.jp/abc/ghi/○○○.html」に見せかけたい
・・・という場合には規則性がないので、それぞれのRewriteRuleを記述する必要があります。
RewriteEngine On
RewriteBase /
RewriteRule ^abc/○○○.html$ /abc/hogehoge.cgi?dir=xyz&mode=○&page=△ [L]
RewriteRule ^abc/def/○○○.html$ /abc/hogehoge.cgi?dir=uvw&mode=◎&page=● [L]
RewriteRule ^abc/ghi/○○○.html$ /abc/hogehoge.cgi?dir=rst&mode=□&page=× [L]
※「httpd.conf」の「directory」ディレクティブ内に記述します。
例えば、
「hogehoge.jp/abc/hogehoge.cgi?dir=xyz&mode=○&page=△」を実行すると生成される「hogehoge.jp/abc/xyz/○_△.html」を「hogehoge.jp/abc/○_△.html」に見せかけたい
「hogehoge.jp/abc/hogehoge.cgi?dir=xyz&mode=◎&page=●」を実行すると生成される「hogehoge.jp/abc/xyz/◎_●.html」を「hogehoge.jp/def/◎_●.html」に見せかけたい
「hogehoge.jp/abc/hogehoge.cgi?dir=xyz&mode=□&page=×」を実行すると生成される「hogehoge.jp/abc/xyz/□_×.html」を「hogehoge.jp/ghi/□_×.html」に見せかけたい
・・・と言う場合には、次のように1つにまとめる事が出来ます。
RewriteEngine On
RewriteBase /
RewriteRule ^[a-z]{3}/(.*)_(.*)\.html$ /abc/hogehoge.cgi?dir=xyz&mode=$1&page=$2 [L]
※細かいやり取りが必要になりそうですので、コメント欄を開けてくださると助かります。
【1】Directoryの中に書いたら、再起動できましたが、URLの書き換えはできませんでした。
<Directory /home/homepage/public_html>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9_]+)/(.*) $1/xyz/$2
</Directory>
【2】○○○.htmlは数千ページあり、○○○の部分は名詞なので、
1つずつ記述するのは困難です。
【1】Directoryの中に書いたら、再起動できましたが、URLの書き換えはできませんでした。
<Directory /home/homepage/public_html>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9_]+)/(.*) $1/xyz/$2
</Directory>
【2】○○○.htmlは数千ページあり、○○○の部分は名詞なので、
1つずつ記述するのは困難です。