如果我有文件,请说rec-view.php
,然后我可以通过此网址拨打电话:
domain.com/record/rec-view.php?id=3
但是,我想用以下URL调用此文件:
domain.com/record/3
所以,基本上我想告诉服务器,如果有任何文件以" -view.php "结尾? name,然后它应该在URL中一起删除文件名,并仅通过传递id打开该文件。
我正在尝试以下规则,它通过" / v"访问该文件。但我需要通过动态数字进行访问。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)/v$ $1-view.php [NC,L]
答案 0 :(得分:1)
尝试:
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteRule ^(.*)/(.*) $1-view.php?id=$2 [L]
答案 1 :(得分:1)
试试这个:
Options +FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
# Match the host, if you wish
#RewriteCond %{HTTP_HOST} ^domain\.com$
RewriteRule record/(\d) /record/rec-view.php?id=$1 [NC,L]
</IfModule>
如果您愿意,可以test it online。
(\d)
只与数字值匹配,如果您希望接受任何值,可以将其更改为(.*)
。
刚看到你需要一个更通用的规则:
# Maps record/4 to record/record-view.php?id=4
RewriteRule (.*)/(\d) /$1/$1-view.php?id=$2 [NC,L]
为此,您需要更严格的命名约定。更具体地说,您需要将所有这些*-view.php
文件命名为与其包含目录完全相同。
除非它始终是前3个字符,否则无法凭空获得rec
前缀;是吗?
根据您的评论,这是一个更通用的规则集,用于检查URI的最后一个段是否为数字,如果是,则将请求映射到包含目录的*-view.php
文件,同时保持目录结构并附加?id=*
查询字符串:
# This rule maps this:
# domain.com/foo/bar/baz/4
# to:
# domain.com/foo/bar/baz/baz-view.php?id=4
RewriteRule ^(.*)/(.*)/(\d)$ /$1/$2/$2-view.php?id=$3 [L,R]
您可能还需要其他变体:
# This rule maps this:
# domain.com/foo/bar/baz/4
# to:
# domain.com/foo/bar/baz-view.php?id=4
#
# Notice the baz/ segment dropped.
RewriteRule ^(.*)/(.*)/(\d)$ /$1/$2-view.php?id=$3 [L,R]
# This rule maps this:
# domain.com/foo/bar/baz/4
# to:
# domain.com/baz-view.php?id=4
#
# Notice all the segments dropped. Mapping to
# a php file in the root directory.
RewriteRule ^(.*)/(.*)/(\d)$ /$2-view.php?id=$3 [L,R]