1

ファイルに問題があり.htaccessます。それは私のページを介してすべてをリダイレクトしていindex.phpます。これは、ほとんどのリクエストに必要なものです。

しかし、リダイレクトしたくないのは、AJAX 呼び出しを介したときだけです。

index.php次のように、ファイルを介してリクエストをリダイレクトします。
RewriteRule /.* /index.php [NC,L]

AJAX リクエストの URL は次のとおりです。
http://myurl.dev/login/ajax/functions.php

ディレクトリ構造:
/modules/login/ajax/functions.php

私は正規表現とRewriteRulesの経験がなく、さまざまなロジックで多くのバリエーションを読んだり試したりしましたが、/ajax/から何も止めてインデックスページにリダイレクトしないようにすることはできません。

/ajax/を除き、Index RewriteRule の前に RewriteCond を試して index にリダイレクトしようとしましたが、うまくいきませんでした。

Rewrite Cond %{REQUEST_URI} !(.*)/ajax
RewriteRule /.* /index.php [NC,L]

/ajax/ リクエストに対して別の RewriteRule も試しました。
RewriteRule ^(.*)/ajax/functions\.php$ /modules/$1/ajax/functions.php [NC,L]

したがって、これまでのところ何も機能していません。にリダイレクトするか、にindexヒットし500 server errorます。

誰かに役立つ提案やリンクはありますか? ありがとう。

: リダイレクトと言うとき、Apache は[R]フラグなしでは完全な URL 更新を行わないことを知っているので、ページ全体の更新を意味するわけではありません。

-- 編集: 作業ファイル --

ここに私の完全な .htaccess コードがあります:

Options +FollowSymLinks  
RewriteEngine on

# Intercept any requests to the core, and keep them being written to the core (so they don't go to index.php)
RewriteRule ^core/(.*)$ core/$1 [NC,L]

# The magic, stops any requests to a file for being redirected.
# needed to be under the /core/ redirect
RewriteCond %{SCRIPT_FILENAME} !-f

# Rewrite all requests to index.php.
RewriteRule /.* /index.php [NC,L]

# Some requests (without trailing slashes) can fall through the above rule. This bit catches those stragglers.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ /$1/ [L,R=301]

ErrorDocument 404 /404/
4

1 に答える 1

1

使用する

RewriteCond %{SCRIPT_FILENAME} !-d //excludes existing directories
RewriteCond %{SCRIPT_FILENAME} !-f //excludes existing files

の前にRewriteRule。これにより、すでに存在するディレクトリまたはファイルが除外されるため、実際には存在するため、RewriteRuleは機能しませんが、は機能しますhttp://myurl.dev/login/ajax/functions.phphttp://myurl.dev/someOtherNonExistantFile.php

これで完全な.htaccessファイルコードになります。

AuthType Basic
Options +FollowSymLinks  
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
# Intercept any requests to the core, and keep them being written to the core (so they don't go to index.php)
RewriteRule ^core/(.*)$ core/$1 [NC,L]

# Rewrite all requests to index.php.
RewriteRule /.* /index.php [NC,L]

# Some requests (without trailing slashes) can fall through the above rule. This bit catches those stragglers.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ /$1/ [L,R=301]

ErrorDocument 404 /404/
于 2012-11-16T08:58:35.103 に答える