だから私はmod_rewriteにいくつかの異なることをさせようとしていますが、私はそれを完全に理解していません。そうしたいです:
- URL(この場合は.shtml)からファイル拡張子を削除します
次のように特定のURLを書き直します。
/dashboard -> /ui/dashboard/index.shtml /dashboard/ -> /ui/dashboard/index.shtml /dashboard/list -> /ui/dashboard/list.shtml /dashboard/list/ -> /ui/dashboard/list.shtml /workspace -> /ui/workspace/index.shtml /workspace/ -> /ui/workspace/index.shtml /account/manage -> /ui/account/manage.shtml /account/manage/ -> /ui/account/manage.shtml
末尾のスラッシュを追加または削除します(一貫している限り、どちらでも構いません)
私が現在持っているものは、そこまでの道のりの約90%を私にもたらします。私の.htaccessファイルには、次のものがあります。
DirectoryIndex index.shtml index.html index.htm
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
# Get rid of the /ui/ in the URLs
RewriteRule ^(account|workspace|dashboard)([a-zA-Z0-9\-_\.\/]+)?$ /ui/$1$2 [NC,L]
# Add the trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/|#(.*))$
RewriteRule ^(.*)$ $1/ [R=301,L]
# Remove the shtml extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.shtml -f
RewriteRule ^([^\.]+)/$ $1\.shtml
</IfModule>
今私が遭遇している問題は2つあります:
まず、上記の手順2でリストされたディレクトリに概説されているインデックスページの1つにアクセスしようとすると、末尾のスラッシュを使用する限り問題ありませんが、末尾のスラッシュを省略すると、URLが正しく書き換えられません(ただし、ページは引き続き読み込まれます)。例えば
/dashboard/ remains /dashboard/ in the address bar.
/dashboard rewrites to /ui/dashboard/ in the address bar.
これらのindex.shtmlページを取得して、アドレスバーの一貫性を保つにはどうすればよいですか?
次に、書き換えられたディレクトリの1つにあるディレクトリインデックス以外のページにアクセスしようとし、末尾にスラッシュを含めると、404エラーが発生します。例えば:
/dashboard/list/
404エラーをスローします:
The requested URL /ui/dashboard/list.shtml/ was not found on this server.
あなたが提供できるこれを適切に機能させるためのどんな助けも大いに感謝されます。