IIS または Apache のパラメータとして存在しないディレクトリを渡す
-
19-09-2019 - |
質問
まずこの URL を見てください。
https://stackoverflow.com/questions/tagged/xoxoxo/
このディレクトリは存在しませんが、どういうわけか stackoverflow はその最後のディレクトリをパラメータとしてベース スクリプトに渡すことができます。
IIS または Apache をそのように構成することは可能ですか?どうやって?
解決
この種の動作の背後にあるメカニズムは次のように呼ばれます。 URL書き換え で実装できます アパッチ とともに mod_rewrite
-モジュールおよびいずれかの Helicon を備えた IIS ISAPI_Rewrite Lite (または Helicon が提供する非無料の代替手段の 1 つ) IIS 5.1 そして 6 または Microsoft URL書き換えモジュール のために IIS7.
たとえば、次の設定では、既存のファイルまたはディレクトリに一致しないすべてのリクエストが確実に転送されます。 index.php
ファイル。
mod_rewrite
(.htaccess
ドキュメントのルート ディレクトリまたは httpd.conf
)
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR] // IF is file (with size > 0)
RewriteCond %{REQUEST_FILENAME} -l [OR] // OR is symbolic link
RewriteCond %{REQUEST_FILENAME} -d // OR is directory
RewriteRule ^.*$ - [NC,L] // DO NOTHING
RewriteRule ^.*$ index.php [NC,L] // TRANSFER TO index.php
ISAPI_Rewrite Lite (IIS 設定の適切なダイアログ内)
// uses same syntax as mod_rewrite
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Microsoft URL書き換えモジュール (あなたの中で web.config
ドキュメントのルート ディレクトリまたは構成ツリーのどこか)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<clear />
<rule name="MatchExistingFiles" stopProcessing="true">
<match url="^.*$" />
<conditions logicalGrouping="MatchAny">
<add input="{REQUEST_FILENAME}" matchType="IsFile" pattern="" ignoreCase="false" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" pattern="" ignoreCase="false" />
</conditions>
<action type="None" />
</rule>
<rule name="RemapMVC" stopProcessing="true">
<match url="^.*$" />
<conditions logicalGrouping="MatchAll" />
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
所属していません StackOverflow