Concrete5漂亮的URL(mod_rewrite)停止工作

我pipe理两个网站,都运行Concrete5 CMS(v5.6.3.4),它使用.htaccess文件来重写url,所以'index.php'文件被隐藏起来,URL看起来好多了。 类似于WordPress的。 Concrete5添加的.htaccess内容是:

<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME}/index.html !-f RewriteCond %{REQUEST_FILENAME}/index.php !-f RewriteRule . index.php [L] </IfModule>

这用于正常工作,但现在只有主页是可及的。 当我访问其中一个网页时,例如/contact HTTP 301 Moved Permanently被返回,并被redirect到主页。

当我访问/index.php/contact联系人页面正确加载。 我也尝试了Wordpress重写规则,并给出了相同的结果。

它看起来像停止工作,因为一些Apache,PHP或mod_rewrite模块版本更改或由我的托pipe公司。 这些站点运行在Apache 2.4.17和PHP 5.5.30上。 我无法findmod_rewrite模块版本。

我也尝试了Apache FallbackResource /index.php ,似乎适用于子页面,但在这种情况下,主页加载失败。

任何帮助表示赞赏。

更新

Apache加载的模块是:

芯mod_authn_file模块mod_authn_dbm mod_authn_anon mod_authn_dbd mod_authn_socache mod_authn_core mod_authz_host mod_authz_groupfile mod_authz_user mod_authz_dbm mod_authz_owner mod_authz_dbd mod_authz_core mod_access_compat mod_auth_basic mod_auth_form mod_auth_digest的mod_allowmethods mod_file_cache提供mod_cache的mod_cache_disk mod_cache_socache mod_socache_shmcb mod_socache_dbm mod_socache_memcache mod_so mod_macro mod_dbd mod_dumpio mod_buffer mod_ratelimit mod_reqtimeout mod_ext_filter mod_request mod_include负责mod_filter mod_substitute mod_sed mod_deflate模块http_core mod_mime mod_log_config mod_log_debug mod_logio mod_env指定mod_expires mod_headers中mod_unique_id mod_setenvif mod_version mod_remoteip mod_proxy mod_proxy_connect mod_proxy_ftp mod_proxy_http mod_proxy_fcgi mod_proxy_scgi mod_proxy_wstunnel mod_proxy_ajp mod_proxy_balancer mod_proxy_express mod_session mod_session_cookie mod_session_dbd mod_slotmem_shm mod_ssl mod_lbmethod_byrequests mod_lbmethod_bytraffic mod_lbmethod_bybusyness mod_lbmethod_heartbeat mod_unixd mod_dav mod_status mod_autoindex mod_info mod_suexec mod_cgi mod_dav_fs mod_dav_lock mod_vhost_alias mod_negotiation mod_dir mod_actions mod_speling mod_userdir mod_alias mod_rewrite mod_php5 mod_ruid2 prefork

这原来与Apache升级有关。 该问题可以通过添加:

define('SERVER_PATH_VARIABLE','REQUEST_URI');

到config / site.php

有关详情,请参阅此处: http : //www.concrete5.org/developers/bugs/5-6-3-4/every-page-returns-page-not-found-except-home-page-with-pretty -u /

学分是为Concrete5论坛用户sandsoft!

我运行一个类似的Apache / PHP版本,唯一的区别是我可以看到的是这样的:

 RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] 

注意index.php前面的/。 尝试一下,然后在你的两个额外的条件,并看看是否有效。

请注意,这是在.htaccess和在我的实际虚拟主机文件在Apache。

你确定mod重写启用? 尝试一个简单的规则作为测试:

 RewriteRule ^xxx https://google.com [R=301,L] 

重写块之前,保存,重新启动apache(如果它不是.htaccess),然后尝试访问:yoursite.com/xxx

如果它工作,并最终在谷歌,然后重写是好的。

另外检查phpinfo()如果你没有,你应该看到这个,或者类似的东西:

 Configuration apache2handler Loaded modulees core mod_so http_core [...] mod_alias mod_rewrite [...] 

顺便提一下,您提供的数据非常好。

据我所知,Apache和它的模块一起发布,至少是标准的,虽然我可能是错的,但我相信大部分的安装都是这样的,所以至少不太可能会有问题,但是很可能是托管公司可能忘记打开mod重写,在这里我曾多次看到类似的问题。

更新:

我用firefox live http头测试了你的url:

 GET /aanleg/ HTTP/1.1 HTTP/1.1 301 Moved Permanently Location: http://yoursite.com 

我第一次写你的重定向工作正常,但它不能正常工作,这是完全错误的,因为应该没有重定向。

既然你运行phpinfo,php也在运行。

你需要显示你的整个htaccess,因为你有一个不好的规则,重定向的网址。

 RewriteCond %{HTTP_HOST} . RewriteCond %{HTTP_HOST} !^www\.yoursite\.nl [NC] RewriteRule ^(.*)$ http://www.yoursite.nl/$1 [R=301,L] RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] 

这就是所有你应该有重写,除非你有特定的,但显然有一个重写规则,是发送一切/这不应该发生。

更新:这个问题几乎可以肯定是一个具体的问题,而不是一个Apache的重定向问题。

下一个版本的legacy5(5.6)版本不会遇到这个问题:已经修复https://github.com/concrete5/concrete5-legacy/pull/1931