1

意识到还有其他关于此问题的帖子,但我无法找到专门针对我需要做的事情的问题。如果我忽略了一个潜在的解决方案,我深表歉意。

这就是我希望使用/请求 URL 的方式:

http://mysite.com/read/comics/all-star-superman/all-star-superman-01/1

这就是我目前的工作方式:

http://mysite.com/read/index.php?dir=Comics/All%20Star%20Superman&file=All%20Star%20Superman%2001.cbr&page=1

然而,dir变量可以很长。它并不总是 2 深。这真的是让我脑洞大开的部分。另外,我想从文件中删除扩展名,因此我需要能够将其与普通目录区分开来。

我唯一的猜测是将整个 URI 请求发送到 index.php,然后从那里解析它。我需要验证最后一个值/是数字之后的最后一个值(很容易),然后如果是这种情况,它下面的值就是文件名。我想我可以通过file_exists()添加 .cbz/.cbz 的扩展名并查看哪个有效来验证它。但是我想我的不足之处是如果对目录/文件的请求通过但没有页面(所以没有尾随的数字页面值)。我如何判断它是文件还是目录请求?

将所有 URI 请求发送到脚本并在那里解析它是否更快 - 或者尝试将所有条件写入.htaccess文件中?不过我不太熟悉mod_rewrite

4

2 回答 2

1

看起来这种复杂的处理将在 mod_rewrite 本身中成为可能。通过启用 mod_rewrite 和 .htaccess httpd.conf,然后将此代码放在您.htaccessDOCUMENT_ROOT目录下:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# convert all the hyphens to spaces(%20) recursively
RewriteRule ^([^-]+)-(.*)$ /$1\%20$2 [L,NE]

# forward all read/... requests to /index.php
RewriteRule ^(read)/((?:[^/]+/)+?)([^/]+)/([^/]+)/?$ /$1/index.php?dir=$2&file=$3.cbz&page=$4 [L,NE,NC]
于 2013-05-29T14:43:56.913 回答
0

您可以在 htaccess 文件上尝试这样的操作:

RewriteEngine On
RewriteRule  ^read/index.php?dir=(.+)/(.+)&file=(.+).cbr&page=(\d+)$  read/$1/$2/$3/$4 [NC,L]
于 2013-05-29T14:31:22.543 回答