Apache Mod Rewrite-仅限最后一个参数



我想只根据最后一个参数重写一些URL。例如:

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

我想获取THIS-param并将其用于重写。它总是最后一个参数,但不一定是第三个。可能是第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]

您几乎做到了。您需要捕获最后一个/之后的所有内容,如果需要,还可以选择捕获它之前的内容。你说它可以是第二到第五,但没有提到第一,所以假设某个在它前面有一个/,就像在^.+/中一样。

这也允许后面的/

已编辑以纳入现有规则:

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]

最新更新