我正在将网站安装到1&1
提供的托管上。似乎1&1
对htaccess文件的运行方式有各种怪癖和问题。
事情没有正常工作,我已经将文件剥离到最低限度,试图找到问题的基础。
这是我的htaccess文件:
AddType x-mapp-php5 .php
RewriteEngine On
RewriteBase /
RewriteRule ^pages/([a-zA-Z]*)/?$ page.php [NC]
RewriteRule ^listings/([a-zA-Z]*)/?$ page.php [NC]
现在奇怪的是:
转到http://www.essenceseeker.com/pages/example
工作
转到http://www.essenceseeker.com/listings/example
没有!
规则是相同的,唯一的区别是第一个子类别。 服务器称为“页面”或“列表”的“真实”文件夹可能不会引起冲突。
似乎只使用名为“pages”的子文件夹才能正常工作 - 这不仅仅是'listing'的问题,因为任何其他子文件夹名称都不会被选中。
有什么可能导致这种情况?
答案 0 :(得分:1)
请改为尝试:
AddType x-mapp-php5 .php
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteRule ^listings/([a-z]*)/?$ /page.php [NC,QSA,L]
RewriteRule ^pages/([a-z]*)/?$ /page.php [NC,QSA,L]
这需要放在网站根目录下的.htaccess文件中。
如果您不打算在重写规则中使用该部分,则不需要括号()
。
我添加了QSA
标记以保留任何可能的参数(查询字符串) - 如引荐,跟踪ID等。
我还添加了L
标志,以便在重写发生时停止重写。
我已经更改了规则顺序 - 以防万一,虽然没关系
答案 1 :(得分:0)
在这两种情况下,您的RegExp都是错误的。 1& 1地图靠近匹配,因此pages/example
映射到page.php
,page1.php
映射到page.php
。
我猜正确的规则是
RewriteRule ^pages/[a-zA-Z]*$ page.php [NC]
答案 2 :(得分:-1)
在使用php {x}}或https://github.com/bcosca/fatfree
等php微框架时,我在.htaccess文件中使用了以下选项Options +FollowSymLinks -MultiViews
AddType x-mapp-php6 .php
AddHandler x-mapp-php6 .php
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]