编辑:
在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匹配。
答案 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
指令。