0

次のコードがあり、そのようなことをしようとしています。たとえば mydomain.com/server2/whatever のように、スラッシュの後に何かを入力すると、アドレスが mydomain.com/server2/ であるとします。server2.php をロードしたいのですが、アドレスは同じでなければなりません。

<IfModule mod_rewrite.c>
    Options +FollowSymlinks
  # Options +SymLinksIfOwnerMatch
    RewriteEngine On
    RewriteBase /

    # remove index.php
    RewriteRule ^index\.php/?$ / [L,R=301,NC]

    # Hide File Extensions
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}\.php -f
    RewriteRule ^([^/]+)/$ $1.php

    # Add 301 redirects to new extensionless file
    RewriteCond %{THE_REQUEST} ^[A-Z]+\ /([^/]+/)*[^.]+\.php(\?[^\ ]*)?\ HTTP/
    RewriteRule ^(([^/]+/)*[^.]+)\.php$ http://www.mydomain.com/$1 [R=301,L]

    # Add the trailing slash
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
    RewriteRule (.*)$ http://www.mydomain.com/$1/ [R=301,L]


</IfModule>

また、上記のコードが 100% 正しいかどうかもわかりません。助けてくれてありがとう。

4

1 に答える 1

1

コードに問題があり、特定の URL で無限ループが発生します。コードを次のように置き換えます。

<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On
    RewriteBase /

    # remove index.php
    RewriteCond %{THE_REQUEST} /index\.php [NC]
    RewriteRule ^(.*?)index\.php$ /$1 [L,R=301,NC,NE]

    # To externally redirect /dir/foo.php to /dir/foo
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(.+?)\.php[\s?] [NC]
    RewriteRule ^ /%1/ [R=301,L,NE]

    # To internally forward /dir/foo to /dir/foo.php
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{DOCUMENT_ROOT}/$1.php -f
    RewriteRule ^(.+?)/?$ /$1.php [L]

    # Add the trailing slash
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=301]

</IfModule>
于 2013-11-10T14:09:05.397 に答える