0

このコードを使用して、URL の末尾から .php を削除し、SEF を増やしています。

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/(.+)\.php[^\s]* [NC]
RewriteRule ^ /%1 [R=301,NE,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [QSA,NC,L]

これは一般的で、すべての UR で完全に機能しますが、唯一の URL に対して例外を作成する方法を知りたいと思います。つまり 、他のすべてに影響を与えずにhttp://www.domain.com/services. http://www.domain.com/services.phpこれは可能ですか?

シンプルなリダイレクトを試しましたが、ループに入りました。

! 編集済み!

私はこれらのルールも持っているとは言いませんでした:

wwwを追加。

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

インデックスを削除します(インデックスの拡張子 .php は既に削除されています)

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s(.*)/index/?([^\ \?]*) [NC]
RewriteRule ^ %1/%2 [R=301,L]
4

4 に答える 4

2

あなたがすべき :

  • を追加しRewriteCondて無効にしますservices.php => services
  • 最初のルールはユーザーが手動でURLservices => services.phpを使用することを妨げないため、強制する別のルールを追加しますservices

満杯.htaccess

# domain.tld > www.domain.tld (visible)
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

# services > services.php (visible)
RewriteRule ^services/?$ services.php [R=301,QSA,L]

# filename > filename.php (transparent)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [QSA,NC,L]

# filename.php > filename (visible, exception for services.php)
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/(.+)\.php[^\s]* [NC]
RewriteCond %{REQUEST_FILENAME} !services\.php
RewriteRule ^ /%1 [R=301,NE,L]

# index > /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s(.*)/index/?([^\ \?]*) [NC]
RewriteRule ^ %1/%2 [R=301,L]
于 2013-11-14T09:46:54.630 に答える
1

削除ルールを少し変更するだけで.phpうまくいくはずです。

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/(.+?)\.php[\s?] [NC]
RewriteRule !^services\.php$ /%1 [R=301,NE,NC,L]
于 2013-11-15T07:06:49.437 に答える
0

これを試してみませんか?

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
于 2013-11-14T09:44:37.463 に答える