我不能转换扁平链的动态链接通过我的.htaccess文件

问题描述:

编辑:我不能转换扁平链的动态链接通过我的.htaccess文件

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

然而,编辑/etc/apache2/sites-available/default文件没有批准我的.htaccess文件足够的权限做我想做的事:

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    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匹配。

+0

你把'.htaccess'文件放入webroot中了吗? – Lekensteyn 2011-06-06 08:59:32

+0

@Lekensteyn:是的,我已经证实,直接访问“真实路径”(即http://www.mydomain.com/flat-link?a = b&c = d')会给出预期的响应。然而,访问虚构路径('http://www.mydomain.com/flat/link?a = b&c = d')会在我身上抛出一个'404' :-( – dbm 2011-06-06 09:10:50

.*匹配的一切,尽量使其不太贪婪通过附加?它:

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

如果这不起作用,尝试除了斜线匹配的一切:

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

这两个建议的正则表达式都可以工作,但只能在一些挖掘之后-and-mining:在Ubuntu上安装Apache2非常简单,但是Web服务器似乎与荒谬的边界紧密相关*默认情况下,所有*都是禁用的,也包括.htaccess文件编辑'/etc/apache2/sites-available/default'文件根据编辑的答案释放apache2-fury(并且你的建议让我成为它的主人):-) – dbm 2011-06-06 11:42:14

+0

对不起,我刚才注意到我以前的评论中有一个错字。它应该说“...根据编辑的**问题** ...”(而不是我写的答案) – dbm 2011-06-07 06:05:57

为什么只不要'把这个在httpd.conf(也许.htaccess也可以工作)

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

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

所以,你可以为你link.phplink

+0

这实际上是对裸露的,未经训练的眼睛最清楚的解决方案。然而,有一点需要注意:不能保证有人可以访问'httpd.conf'文件(当一家网站酒店托管您的网站时很可能是这种情况)。 – dbm 2011-06-06 11:19:40

+0

我相信它也可以,如果你把它放入.htaccess中。 – dynamic 2011-06-06 11:26:09

+0

我试着将你建议的行添加到我的'.htaccess'文件中(稍作修改以适应我的需要),但'404'仍然存在。由于没有涉及正则表达式,我实际上更喜欢你的解决方案。它似乎更清晰,更容易理解,但不幸的是,它并没有为我工作,虽然... – dbm 2011-06-06 11:45:32

你或许应该指定RewriteBase指令在指定this answer的原因。

+0

您的提示在阅读文档时有效,但RewriteBase对我来说似乎没有任何区别,无论是更好还是更糟(虽然我不知道为什么)。 – dbm 2011-06-06 11:48:03