我想只根据最后一个参数重写一些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]