3

拡張子を非拡張子の URL にリダイレクトし、requestedfilename + .phpを表示する.htaccessファイルがあります。条件の(.*)部分でうまく機能します。

domain.com/file.htmlまたはdomain.com/file.xmlと入力すると、 file.phpが表示され、URL はdomain.com/fileのようになります。

式から .js や .css などの拡張子を除外する方法を知りたいだけです。それらを他のphpファイルにリダイレクトしたくありません。

(.*!.(js|css))の代わりに(.*)のようなことを試しましたが、有効な解決策が見つかりません...

現在のコードは次のとおりです。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

#
# to display the name.php file for any requested extension (.*)
#
RewriteRule ^(.*)\.(.*) $1\.php

#
# to hide all type of extensions (.*) of urls
#
RewriteCond %{THE_REQUEST} ^[A-Z]+\s.+\.(.*)\sHTTP/.+
RewriteRule ^(.+)\.php $1 [R=301,L]

#
# no extension url to php
#
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]

</IfModule>
4

2 に答える 2

5

お使いのバージョンの Apache でサポートされている場合は、「否定先読み」を使用して、最初の RewriteRule を次のように記述できる場合があります。

RewriteRule ^(.*)\.(?!js|css)([^.]*)$ $1\.php

この[^.]部分は(.*)\.、 が最後の まですべてに一致することを確認し.、否定的な先読みを適切な場所に「配置」します。

于 2013-03-04T13:28:41.040 に答える
0

リダイレクトの主なアイデアは、何かが存在しないときに転送することです。そのため、リダイレクトは、要求されたURLが存在しない場合にのみ機能します。ファイルがある場合は、http://mysite.com/js/script.js常にそのファイルを通常のファイルとして開きます。

したがって、あなたの場合、cssファイルとjsファイルが実際に存在する場合、それらのファイルに特定のリダイレクトは必要ありません。

あなたがする必要があるかもしれないことは、それらのファイルのフルパスを指すことです。例:

  • http://mysite.com/js/script.js(動作します)
  • /js/script.js(動作します)
  • js / script.js(リダイレクトされたディレクトリとルートが異なる場合は失敗します)

等...

于 2013-03-04T13:11:19.220 に答える