0

私が(mod_rewriteで)達成しようとしているのは、ファイル/ディレクトリがパブリックフォルダーに存在するかどうかを要求に応じて確認することです。存在する場合はそれを提供し、存在しない場合は要求をindex.phpファイルにルーティングします。また、URL に拡張子が指定されていない場合は、デフォルトで .html になります。

以下は私のフォルダ構造です:

/.htaccess
/index.php
/public
    /test.html
    /test.xml
    /a_folder
        /index.html
        /test.html

たとえば、ここにいくつかのリクエストとレスポンスがあります:

  • example.com/test.xml >>> /public/test.xml
  • example.com/a_folder/ >>> /public/a_folder/index.html
  • example.com/a_folder/test >>> /public/a_folder/test.html
  • example.com/not_in_public >>> /index.php

これに関する指針は素晴らしいでしょう、事前に感謝します。

4

3 に答える 3

1

このようなもの:(私のWordPress.htaccessファイルから大幅に削除されました)

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)^(\.\w+) $1.html [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

$1.html線が頭のてっぺんから外れていて、微調整が必​​要な場合があります。これは、要求されたURLがドットで終わり、その後に1つ以上の単語文字が続くというダムチェックであることに注意してください。

于 2013-01-23T13:46:43.503 に答える
1
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^(|index\.php)$ - [L]
    RewriteRule ^public/(.*)$ - [L]
    RewriteRule ^(.*)$ public/$1
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . index.php [R]
</IfModule>

これでうまくいくはずです。

基本的に、それが何もしない場合、それが何もしない場合、それが他の何かである場合、それはファイルまたはディレクトリのいずれかであるかどうかを再書き込みしてチェックします/。そうでない場合は、にリダイレクトされます。/index.php/public/whateveryouwant/public/whateveryouwantindex.php

于 2013-01-23T13:53:53.420 に答える
0

少しジャグリングして動作させた後、@jxpx777と@N1xx1に感謝します。

Options -Indexes

RewriteEngine On
RewriteBase /
RewriteRule ^public/(.*)$ - [L]

# Check public cache
RewriteRule ^(.*)$ public/$1
RewriteRule (.*)/$ $1/index

# Add .html if not extension provided
RewriteCond %{REQUEST_URI} !\..*$
RewriteRule ^(.*)$ $1.html

# Push through stack in not in cache
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
于 2013-01-23T15:23:24.160 に答える