apache - .htaccess mod_rewrite 子目录到 URL 参数

标签 apache .htaccess mod-rewrite

我希望之前没有人一遍又一遍地问这个问题,但我没有使用谷歌、w3schools 等进一步得到答案。所以这是我的问题: 我正在编写一个脚本,该脚本创建我主页上的项目索引,并根据信息文件制作一个包含图像和预告文本的漂亮列表。我的项目大多在 github 上,自述文件是 markdown 格式的,所以我想我可以使用 PHP 按需从 github 上的最新 blob 的 markdown 动态生成 HTML,这样它就会自动更新。 我的目录结构如下所示:

projects
    project1
        .remoteindex
        .info
    project2
        .remoteindex
        .info
    index.php
    .htaccess

因此,当仅请求 domain.tld/projects/ 时,我会从 .info 获取信息,并为所有项目创建一个很好的索引。但是如果 domain.tld/projects/project1/ 请求它,我想在内部将其重定向到 domain.tld/projects/?dir=project1 来进行 Markdown 解析等等。但 domain.tld/projects/project1/image.png 不应重定向。

这是我尝试过的:

.htaccess
RewriteEngine on
RewriteRule ^([^/]+)/?$ index.php?dir=$1 [R,L]

我将其重定向而不是重写,以便我可以看到错误是什么,因为我刚刚收到 404。我重定向到的 URL 是 domain.tld/home/www/web310/html/projects/index.php?dir=project1 很明显,Web 服务器的内部结构和路径等出现了问题。 我希望您能理解我的问题,如果有人可以帮助我,我会非常高兴,因为无论如何我都完全迷失在 .htaccess 上。

编辑:

请参阅下面我的回答以了解所使用的 .htaccess

奇怪的是,如果我的子目录中有一个 index.html ,我的本地 Web 服务器(Apache with XAMPP for Mac OS X 1.7.3)不会重写,并且 index.html 得到显示,没有它可以正常工作。但是在为我的主页提供服务的真实网络服务器上,它会重写有和没有 index.html (这就是我想要的)。有什么提示吗?

最佳答案

感谢迄今为止的所有帮助!你们真是太棒了!

我发现你们的两种解决方案的共生对我来说效果很好:

RewriteEngine on
RewriteBase /projects
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} -d
RewriteRule ^([^/]+)/?$ index.php?dir=$1 [QSA,L]

当然只有没有[R],这是我的错。 (请参阅我的问题编辑以了解另一个问题)。

关于apache - .htaccess mod_rewrite 子目录到 URL 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8546227/

相关文章:

performance - 其他解决方案,而不是 NGINX 的 .htaccess

.htaccess - 带参数的 htaccess 重定向?

.htaccess - 的意思 ?和 htaccess 重写规则中的 $

PHP SOAP 和命名空间。 PHP fatal error : Class 'Jira\SoapClient' not found

python - Site.domain不断更改为localhost :8000 all the time

apache - 重写模块以处理站点版本文件夹(条斜杠)

regex - htaccess中这个301规则怎么写

php - .htaccess 将我的索引更改为相关页面

php - 让 php 程序运行几个小时

apache - 防止 googlebot 索引 robots.txt 和 .htaccess 中的文件类型