rewriteRuleの練習をしようと
以下のような.htaccessをいれてみたところ飛ばされた先のhtml上のリンクやcssの指定が全部おかしくなってしまいました
RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /hoge.php[L]
php
1//hoge.php 2<?php 3//ハッシュ値取得 4$attach=str_replace($_SERVER["SCRIPT_NAME"]."/","",$_SERVER["REQUEST_URI"]); 5 6/* 7以下$attachの値からDBのデータを拾ってくる処理 8*/ 9 10?> 11 12<!DOCTYPE html> 13<html lang="ja"> 14<head> 15<meta charset="utf-8"> 16<link rel="stylesheet" type="text/css" href="./css/base.css"> 17<link rel="stylesheet" type="text/css" href="./css/hoge.css"> 18 19<a href='./index.php"'>メイン</a>
とりあえず、リンクの指定を「./css/hoge.css」や
「./index.php」から
「dirname($_SERVER['SCRIPT_NAME'])."/css/hoge.css"」や
「dirname($_SERVER['SCRIPT_NAME'])/index.php」に置き換えて対処しましたが
なぜこのようなことが起こるのでしょうか?
そして、できればphpサイドでの修正ではなく、.htaccess側の記述でこのような状況を
防ぐことは出来ないのでしょうか?
追記
ディレクトリ構成は
hoge┃.htaccess
┃ hoge.php
┃ index.php
┃━━━━━css┃base.css
┃hoge.css
そして
hoge.php上のリンクで「./index.php」と指定した場合「hoge/hoge.php/index.php」
とリンクのURLが表示されます
更に追記
申し訳ありません
関係ないと思って記述しなかったのですがhoge.phpは「hoge.php/11b6ffd0e6f38308f10eb480ec7a8b99(ハッシュ値)」のような形でurl指定されます
リスト部分の頭をを少し修正しましたので見ていない方は参考になさってもらえると幸いです。