1

サイトの htaccess ファイルをいくつかの mod_rewrite ディレクティブで修正するのに問題があります。完全な htaccess ファイルのコンテキストではなく、単独で機能することがわかっています。サイトの CMS は Concrete5 であるため、htaccess ファイルに Concrete5 構成の詳細がいくつかあります。

フォーマットの URL を書き換えようとしています

http://www.mywebsite.com/proplist/?location=town&distance=3&proptype=buy&maxPrice=&minPrice=&bedrooms=&propertyType=

http://www.mywebsite.com/property/town/buy/

分離して動作する次のディレクティブがあります (別の Web サーバーの webroot の下にある proplist というフォルダーに index.php を作成しました)。

RewriteBase /proplist
RewriteRule property/([a-zA-z]+)/([a-zA-z]+)/$ http://www.mywebsite.com/property/\/?location=$1&distance=3&proptype=$2&maxPrice=&minPrice=&bedrooms=&propertyType= [R]
Redirect 301 /property/ http://www.mywebsite.com/proplist/

(代わりに %{REQUEST_FILENAME} を使用できると思いますhttp://www.mywebsite.com)

すでに配置されている htaccess ファイルのコンテキストで上記を機能させることはできません (私の修正により):

<IfModule mod_rewrite.c>
RewriteEngine On
#
# -- concrete5 urls start --
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteRule . index.php [L]
</IfModule>
# -- concrete5 urls end --

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

# -- rewrite property search urls --
RewriteBase /proplist
RewriteCond %{REQUEST_URI} property
RewriteRule property/([a-zA-z]+)/([a-zA-z]+)/$ http://www.mywebsite.com/proplist/\/?location=$1&distance=3&proptype=$2&maxPrice=&minPrice=&bedrooms=&propertyType= [R]
Redirect 301 /property/ %{REQUEST_FILENAME}/proplist/
RewriteBase /
# -- end rewrite property search urls --

#Gzip
<ifmodule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript text/javascript
</ifmodule>
#End Gzip

# remove browser bugs
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
Header append Vary User-Agent

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType text/x-javascript "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresDefault "access plus 1 week"
</IfModule>

## EXPIRES CACHING ##
AddType application/font-wof          .woff
AddType application/x-font-woff       .woff
AddType application/x-woff            .woff

# end of full htaccess file

上記の結果は、http://www.mywebsite.com/property/woking/buy/リダイレクトされるなどの URL です。http://www.mywebsite.com/index.php

誰でも助けることができますか?

4

1 に答える 1

0

最初に行う必要があるのは、concrete5 ルーティング ルールの前にすべてのプロパティ検索 URL ルールを配置することです。ルーティング ルールは URI を完全に破壊し、リダイレクトが発生すると、破壊された URI は最終的にリダイレクトされます。

つまり、次のルールを意味します。

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

CMS ルールのに置く必要があります。

また、次のようにルールを変更することもできます。

# -- rewrite property search urls --
RewriteBase /proplist
RewriteCond %{REQUEST_URI} property
RewriteRule property/([a-zA-z]+)/([a-zA-z]+)/$ http://www.mywebsite.com/proplist/\/?location=$1&distance=3&proptype=$2&maxPrice=&minPrice=&bedrooms=&propertyType= [R]
Redirect 301 /property/ %{REQUEST_FILENAME}/proplist/
RewriteBase /
# -- end rewrite property search urls --

に:

# -- rewrite property search urls --
RewriteRule ^property/([a-zA-z]+)/([a-zA-z]+)/$ /proplist/?location=$1&distance=3&proptype=$2&maxPrice=&minPrice=&bedrooms=&propertyType= [L]
RewriteRule ^property/$ /proplist/ [L]
# -- end rewrite property search urls --

しかし、あなたの元のルールが何を意味していたのか、私にはよくわかりません。それらは mod_alias と mod_rewrite の混合であり、混乱することは確実でした。書き換えではなく実際にリダイレクトしたい場合は、フラグを から に変更し[L]ます(これはあなたが求めているものであり、書き換えリダイレクトではありません)。したがって、これら 2 つのルールは、にリダイレクトするルールのすぐ下に配置する必要があります。[L,R=301]www

于 2013-10-09T23:22:24.150 に答える