我无法通过我的.htaccess文件将扁平链接转换为动态链接

时间:2011-06-06 08:30:53

标签: php .htaccess apache2

编辑:

在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

<小时/> 的 ORIGIN:

我发现了几个关于这个的方法,但我无法做到(是的,我是那个悲惨的傻瓜)。

我想翻译一下:

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匹配。

3 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

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

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

这将告诉没有扩展名的Apache文件(DefaultType)必须由PHP解释。

因此,您可以将link.php重命名为link

答案 2 :(得分:0)

您应该根据this answer中指定的原因指定RewriteBase指令。