4

現在の.htaccessファイルを前提として、現在の書き換えに影響を与えずに、「/ src / pub / 」などの追加のURLパスをチェックし、「/」に書き換えるように変更するにはどうすればよいですか?

元の.htaccessファイルは次のとおりです。

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

これが私の最近の試みです(これは機能しません):

RewriteEngine on

RewriteRule ^/src/pub/(.*)$ /$1 [R]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

編集:これが私が達成したいことのいくつかの例です:

新しい追加ルール:

From:  http://www.mysite.com/src/pub/validfile.php
To:    http://www.mysite.com/validfile.php

From:  http://www.mysite.com/src/pub/user/detail/testuser
To:    http://www.mysite.com/user/detail/testuser

既存のルール(すでに機能しています):

From:  http://www.mysite.com/user/detail/testuser
To:    http://www.mysite.com/index.php?route=user/detail/testuser
4

2 に答える 2

5

問題は、URL が最初のルールによって書き換えられ、次に 2 番目のルールによって再度書き換えられていることだと推測しています。

その解決策は、次のように、最初のルールに「最後」フラグを追加することです。

RewriteRule ^/src/pub/(.*)$ /$1 [R,L]
于 2008-11-12T21:20:20.090 に答える
3

.htaccess ファイル内では、代わりにこれを使用します。

RewriteRule ^src/pub/(.*)$ /$1 [R]

先頭の "/"は.htaccess 内では一致せずhttpd.conf、 ( src - ページの下部) 内でのみ一致します。これ以上のルールの処理を停止したい場合は、次のLフラグを追加します。

RewriteRule ^src/pub/(.*)$ /$1 [L,R]

ログの比較を書き換えます (.htaccess コンテキスト):

// using ^/src/pub/(.*)$ - leading slash will not work in .htaccess context!
(1) pass through /home/test/src

// using ^src/pub/(.*)$
(2) rewrite 'src/pub/testme' -> '/testme'
(2) explicitly forcing redirect with http://test/testme
(1) escaping http://test/testme for redirect
(1) redirect to http://test/testme [REDIRECT/302]
于 2008-11-12T21:25:02.123 に答える