私は次のプロジェクト構造を持っています:
すべてのHTMLファイルを含む「views」というフォルダがあります。
問題は今、である。このような私のURLルックス:http://example.com/views/index、のhttp://example.com/views/account ..。
URLの一部を削除するにmod_rewrite
はどうすればよいですか?.htaccess
views
誰かがhttp://example.comにアクセスすると、実際にはファイルhttp://example.com/views/index.phpが表示されるようにしたいと思います。
私はこれに非常に近づいています:
RewriteCond %{REQUEST_URI} !^/(views)
RewriteRule (.*) /views/$1
しかし、問題は、他のすべてのフォルダがもう見つからないことです。フォルダからの私のCSSはcss
また私、見つからないmedia
ファイルが発見されていない、ともない、私のPHP。
編集:これは私の新しい.htaccess
です:
# browser requests PHP
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.php
RewriteRule ^/?(.*)\.php$ /$1 [L,R=301]
# check to see if the request is for a PHP file:
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^/?(.*)$ /$1.php
RewriteRule ^(css|js|media|partials|php)($|/) - [L]
RewriteCond %{REQUEST_URI} !^/(views)
RewriteRule (.*) /views/$1
とても近づきます。下から3行目で、rewrite_ruleのすべてのフォルダーを除外することができ、メディア、css、js、...が読み込まれました。しかし、問題は、その行が上記のrewrite_ruleも削除することです。
フォルダphp
には、、、...のようなファイルがありますがexample.php
、test.php
拡張子なしで参照しています。しかし、下から3番目のルールはすべてのrewrite_rulesを無視するため、これは機能しなくなりました。したがって、PHP拡張機能を削除するルールもあります。
では、特定のrewrite_ruleのみのフォルダーを除外するにはどうすればよいですか?
Edit2:解決しました。
正解.htaccess
:
RewriteEngine On
# browser requests PHP
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.php
RewriteRule ^/?(.*)\.php$ /$1 [L,R=301]
# check to see if the request is for a PHP file:
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^/?(.*)$ /$1.php
RewriteCond %{REQUEST_URI} !^/(views|css|js|media|partials|php)
RewriteRule (.*) /views/$1
あなたの現在のルールでは、接頭辞を追加/views
で始まるものも含め、すべてのURLに/css
、/js
、/media
というように。それらを除外する必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加