0

最後のパラメーターのみに基づいて、いくつかの URL を書き換えたいと考えています。例えば:

http://www.site.com/some-param/some-param/THIS-param

THIS-paramそれをつかんで書き換えに使いたいです。これは常に最後のパラメーターですが、必ずしも 3 番目であるとは限りません。2位、3位、4位、5位かもしれません。

私はこれに近づいています:

RewriteRule ([^/]+)$ index.php?url_title=$1 [NC,L,QSA]

これを URL として使用します (たとえば)。

http://www.test.com/param1

問題は、「param2」を追加すると、サイトが機能しなくなることです。param1 がディレクトリのように見えるのが原因だと思います。

http://www.test.com/param1/param2

理由はありますか?これが私の完全なルールセットです:

Options +FollowSymlinks -MultiViews

RewriteEngine on

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

RewriteRule ([^/]+)$ index.php?url_title=$1 [NC,L,QSA]
RewriteRule .* index.php [L]
4

1 に答える 1

0

あなたはほとんどそれを持っていました。最後の後に続くすべてをキャプチャする必要があり、必要に/応じて、オプションでその前に来るものをキャプチャする必要があります。あなたはそれが2番目から5番目であると言ったが、1番目については言及しなかったので、それはのように何かがその前に来ると仮定/している^.+/

これにより、トレーリングも可能になります/

既存のルールを組み込むために編集:

RewriteEngine On

# Real existing files not rewritten
RewriteCond %{REQUEST_FILENAME} -f [NC,OR] 
RewriteCond %{REQUEST_FILENAME} -d [NC] 
RewriteRule .* - [L]

#Inelegant hack to permit one param only
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ index.php?url_title=$1 [L,QSA]
RewriteRule ^.+/([^/]+)/?$ index.php?url_title=$1 [L,QSA]
# Anything not matching above goes to index.php
RewriteRule .* index.php [L]
于 2012-08-02T13:50:12.877 に答える