我目前正在Kirby建立一个图库,并且有一个专辑页面,实际上有两种模式:1)图库列表,显示所有项目。 2)单张图片。我正在传递一个GET
变量:
/gallery/album-name?p=03.jpg
我真正想要的是这样的网址:
/gallery/album-name/03.jpg
Kirby已经在其默认的.htaccess
文件中进行了一些网址重写,如下所示:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php [L]
重新编写此/index.php/gallery/album-name?p=03.jpg
的网址,删除index.php
部分。
现在,我确实认为我可以简单地重写任何具有get变量的URL:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/([A-Za-z0-9-]+)?$ index.php?p=$1 [L]
但这似乎不起作用。
我的问题是:这可以吗?如果是这样,我的脚本仍然可以使用GET
变量吗?
非常感谢!
我目前的完全重写规则
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
#//www. vs //
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
# block text files in the content folder from being accessed directly
RewriteRule ^content/(.*)\.(txt|md|mdown)$ error [R=301,L]
# block all files in the site folder from being accessed directly
RewriteRule ^site/(.*) error [R=301,L]
# block all files in the kirby folder from being accessed directly
RewriteRule ^kirby/(.*) error [R=301,L]
# make panel links work
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^panel/(.*) panel/index.php [L]
# make gallery links work
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^gallery/(.*)/([A-Za-z0-9-]+\.jpg)?$ index.php?p=$2 [L]
# make site links work
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php [L]
</IfModule>
这适用于所有内容,但我在(例如)此网址上获得了404:/gallery/my-gallery-name/01.jpg
答案 0 :(得分:1)
试试这个,它会起作用
RewriteRule ^our-wedding/(.*)$ index.php?p=$1 [L]
现在您可以通过
访问它/gallery/our-wedding/03.jpg
答案 1 :(得分:0)
RewriteRule
regular expression有两部分
^(.*)/([A-Za-z0-9-]+)?$
| |
$1 $2
$1
是图库部分,$2
是可选图片部分。
无论您需要什么,您都可以只使用其中一个或两个部分。如果您只想使用图片部分,则必须在重写规则中使用$2
RewriteRule ^(.*)/([A-Za-z0-9-]+)?$ index.php?p=$2 [L]
虽然,您的图像部分正则表达式不匹配03.jpg
。如果您想匹配,则必须在字符类.
中加入一个点[...]
或为其添加扩展名
[A-Za-z0-9-]+\.jpg