1

既存のウェブサイトを完全に置き換える必要があります。現在のサイトは完全にスパゲッティ コードであり、わかりやすい URL を模倣するためのいくつかの書き換えルールがあります。

現在のアーキテクチャとデータベース構造では解決できないミッション クリティカルな問題がいくつかあるため、しばらくの間、両方のコード ベースを共存させる必要があります。

これは現在の .htaccess です

Options +FollowSymLinks
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^([^/]+)/$ $1.html
RewriteRule ^([^/]+)/$ $1.php

RewriteRule ^([^/]+)/([^/]+)/$ $1.php?q=$2
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ $1.php?q=$2&r=$3
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ $1.php?q=$2&r=$3&s=$4

私はそれをzendフレームワークサイトに置き換えていますが、ルーティングのためにindex.phpファイルを介してすべてをルーティングします

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -f [NC,OR]
RewriteCond %{REQUEST_FILENAME} -d [NC]
RewriteRule .* - [L]
RewriteRule .* index.php

オリジナルを完全に交換できるようになるまで、2つを組み合わせる方法を知っている人はいますか?

4

2 に答える 2

1

何らかの方法で古い URL を Zend Url にマップできれば、かなり簡単です。あなたが持っていたとしましょう

http://foo.bar.com/something.php?q=arg1&r=arg2

この機能が Zend コードで動作している場合は、有効な URL も必要です。

http://foo.bar.com/something/q/arg1/r/arg2

もしそうなら、古い URL を Zend URL に書き換え、内部リダイレクトを行う代わりに HTTP リダイレクトを行うだけです。

RewriteCond %{QUERY_STRING} ^q=(.*)&r=(.*)^  
RewriteRule ^something\.php$ /something/q/%1/r/%2? [R=301,L]

末尾の「?」に注意してください。これは mod_rewrite に元のクエリ文字列を書き換えられたものに添付しないように指示します (そうしないと、 で終わることになり/something/q/%1/r/%2?q=X&r=yます。ここでは通常の 301 HTTP リダイレクトを行うことに注意してください。

于 2012-09-03T23:11:59.837 に答える
0

それらは簡単にはマージされません。どちらを優先するかが問題になります。さらにいくつかの条件を追加して、すべてがファイルとしてルーティングされないよう$1.phpにし、最後にzendルールを追加することができます。

Options +FollowSymLinks
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^([^/]+)/$ $1.html

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)/$ $1.php

RewriteCond %{REQUEST_URI} ^([^/]+)/
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^([^/]+)/([^/]+)/$ $1.php?q=$2

RewriteCond %{REQUEST_URI} ^([^/]+)/
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ $1.php?q=$2&r=$3

RewriteCond %{REQUEST_URI} ^([^/]+)/
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ $1.php?q=$2&r=$3&s=$4

# other rules
RewriteCond %{REQUEST_FILENAME} -f [NC,OR]
RewriteCond %{REQUEST_FILENAME} -d [NC]
RewriteRule .* - [L]
RewriteRule .* index.php
于 2012-09-03T23:28:31.700 に答える