【问题标题】:I can't convert a flat link to a dynamic link through my .htaccess file我无法通过我的 .htaccess 文件将平面链接转换为动态链接
【发布时间】:2011-06-06 08:30:52
【问题描述】:

编辑:

Ubuntu 系统上默认安装的 Apache2 似乎已完全锁定。这也会影响.htaccess 文件,因为它们不允许覆盖默认配置中的任何内容。

但是,编辑 /etc/apache2/sites-available/default 文件确实授予了我的 .htaccess 文件足够的权限来执行我想做的事情:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews

        # Modify this from "None" to "All" (or any other suitable value)
-->     AllowOverride None

        Order allow,deny
        allow from all
    </Directory>
    ...


编辑:

这是我的 .htaccess 现在的样子:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/(.+)$ $1-$2.php


原产地:

我找到了几个关于此的操作方法,但我无法正确理解(是的,我可悲地愚蠢)。

我想翻译一下:

http://www.mydomain.com/flat/link?a=b&c=d

到这里:

http://www.mydomain.com/flat-link.php?a=b&c=d

到目前为止,我只收到一个愚蠢的 404 抱怨 The requested URL /flat/link was not found on this server.

值得一提的是404其实是对的; www-root 中没有像/flat/link 这样的文件结构,因此我会将虚构的路径转换为实际路径(因为flat-link.php 文件存在)。有人告诉我,这不一定是最漂亮的架构,但它是一个有效的场景,因为我不希望我的文件结构与我的 REST-api 匹配。

【问题讨论】:

  • 你把.htaccess文件放到webroot了吗?
  • @Lekensteyn:是的,我已经验证直接访问“真实路径”(即http://www.mydomain.com/flat-link?a=b&amp;c=d)会给出预期的响应。但是,访问虚构路径 (http://www.mydomain.com/flat/link?a=b&amp;c=d) 会向我抛出 404 :-(

标签: php .htaccess apache2


【解决方案1】:

.* 匹配所有内容,尝试通过向其附加 ? 来减少贪婪:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/(.+)$ $1-$2.php

如果这不起作用,请尝试匹配除斜线之外的所有内容:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/(.+)$ $1-$2.php

【讨论】:

  • 两个建议的正则表达式都有效,但只有在一些挖掘和挖掘之后:在 Ubuntu 上安装 Apache2 很容易,但 Web 服务器似乎被束缚在荒谬的边界上。 Everything 默认禁用。这也包括 .htaccess 文件。根据编辑后的答案编辑/etc/apache2/sites-available/default 文件释放了 apache2-fury(你的建议让我成为了它的主人):-)
  • 抱歉,我刚刚注意到我之前的评论中有一个错字。它应该说“...根据已编辑的 question...”(而不是我写的 answer
【解决方案2】:

为什么不把它放在 httpd.conf 中(也许 .htaccess 也可以)

DefaultType application/x-httpd-php
DirectoryIndex index index.html

这将告诉没有扩展名(默认类型)的 apache 文件必须由 PHP 解释。

所以你可以将你的 link.php 重命名为 link

【讨论】:

  • 这实际上是未经训练的肉眼看起来最清楚的解决方案。但是,有一个小警告:不能保证一个人可以访问httpd.conf-file(很可能是网络酒店托管您的网站时的情况)。
  • 我尝试将您建议的行也添加到我的.htaccess 文件中(稍作修改以满足我的需要),但404 仍然存在。实际上,我更喜欢您的解决方案,因为其中不涉及正则表达式。它似乎更清晰,更容易理解,不幸的是它对我不起作用......
  • 我相信你已经把一个名为“link”的php文件放在一个名为“flat”的目录中,如果你想让它工作/flat/link
【解决方案3】:

出于this answer 中指定的原因,您可能应该指定RewriteBase 指令。

【讨论】:

  • 您的提示在阅读文档时有效,但 RewriteBase 似乎对我没有任何影响,无论好坏(我不知道为什么)。跨度>
猜你喜欢
  • 2018-03-18
  • 1970-01-01
  • 1970-01-01
  • 2012-03-18
  • 2019-11-21
  • 2012-12-08
  • 2021-05-22
  • 2013-06-02
  • 1970-01-01
相关资源
最近更新 更多